我使用Instrumentation#redefineClasses(ClassDefinition)
方法重新加载了我的测试应用程序类。当我尝试在类文件中添加新方法并从现有方法调用它时。我不乐意这样做。但是当我调用一些现有方法和其他Java内置库方法时,它工作得很好。
我的问题是 - Oracle或Open JDK实现是否已知/已确认此限制?我怀疑即使你可以使用INstrumentation Manifest.MF文件重新定义/重新转换你的类 - 必须有多少限制你可以使用它。
有没有人有这方面的经验?
答案 0 :(得分:4)
来自Instrumentation.html#redefineClasses:
重新定义可能会更改方法体,常量池和属性。重新定义不得添加,删除或重命名字段或方法,更改方法的签名或更改继承。在将来的版本中可能会取消这些限制。在应用转换之前,不检查,验证和安装类文件字节,如果结果字节错误,则此方法将引发异常。
所以答案是否定的,这是不可能的。