使用Enum返回类型重新定义方法体

时间:2017-10-17 02:56:40

标签: java enums bytecode javassist

我已经编写了一些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(); }");

0 个答案:

没有答案