我已经编写了一些javassist,它们在加载之前重新定义了某些类的方法体,但是我遇到了一个方法的问题,因为它返回了一个在类中定义的枚举修改,导致在尝试编译方法时找不到异常。 有办法解决这个问题吗?我将在下面留下一个简单的代码示例。
public class TEST {
private float value;
public TEST.CODE getCode() {
return value < 1f ? TEST.CODE.ONE : TEST.CODE.TWO;
}
public enum CODE {
ONE, TWO;
}
}
使用Singleton提供对实现的覆盖。
public class SINGLETON {
private static SINGLETON INSTANCE;
private SINGLETON() {}
public SINGLETON INSTANCE() {
return INSTANCE != null ? INSTANCE : (INSTANCE = new SINGELTON());
}
public TEST.CODE getCode() {
return TEST.CODE.ONE;
}
}
尝试重新定义getCode时,javassist会抱怨编译失败而无法找到TEST $ CODE
CtClass modified = pool.makeClass(new ByteArrayInputStream(inStream));
modified.getDeclaredMethod("getCode").setBody("{ return SINGLETON.INSTANCE().getCode(); }");