2017-01-09 67 views
2

我需要更改第三方库内的静态方法。我已经完成了变换实例方法,但不确定静态方法是否适用同样的事情。可以使用Java Instrumentation在运行时更改静态方法吗?

我有几个MyClass.java中称为myMethod的静态方法。我需要在运行时更改myMethod的实现。 基本上我扩展了ClassFileTransformer,并重写了byte []变换方法,如下图所示。这对于实例方法有效,但我不确定是否可以对静态方法执行相同的操作。

@Override 
public byte[] transform(ClassLoader loader, String className, Class<?> classBeingRedefined, 
         ProtectionDomain protectionDomain, byte[] classfileBuffer) 
    throws IllegalClassFormatException { 

} 

回答

0

是的,当然这是可能的。您可以更改整个班级文件。对于大多数虚拟机,您只能更改方法的实现,而不能更改其签名。如果一个方法是静态的或不是无关紧要的。

相关问题