作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我通过 Javassist 修改我的 TestClass
的 getMessage()
方法体,如下所示:
ClassPool cp = new ClassPool(true);
CtClass ctClass = cp.get("my.test.javassist.TestClass");
CtMethod ctMethod = ctClass.getDeclaredMethod("getMessage");
ctMethod.setBody("{ return \"Hello from javassist\"; }");
ctClass.toClass();
TestClass c = new TestClass();
System.out.println(c.getMessage());
效果很好。但是,如果我删除 ctClass.toClass()
方法调用,主体替换将不起作用。为什么?
我应该如何正确地替换我的 getMessage()
方法的主体?我做得对吗?
最佳答案
ClassPool
包含 CtClass
对象 - 它们表示类,但它们不是 java 类。 toClass()
方法将 CtClass
实例转换为 java 类并实际加载该类。
如果不执行toClass()
,则字节码的变化不会被编译到类中,new TestClass()
会从类路径触发类加载.
关于java - 为什么在使用 Javassist 更改方法主体后必须调用 .toClass()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7385789/
我通过 Javassist 修改我的 TestClass 的 getMessage() 方法体,如下所示: ClassPool cp = new ClassPool(true); CtClass ct
创建动态类的步骤如下: try { classLoader = Class.forName("org.yaddayadda.DynamicClass"
我正在尝试向 React Native 中的功能组件添加引用,以便在 FlatList 组件上使用scrollToEnd。 我想为此使用 recompose,正如他们的文档所述, toClass()
我是一名优秀的程序员,十分优秀!