爪哇岛.对类重定义的限制



Java Platform SE 5 API 规范的方法Instrumentation.redefineClasses(ClassDefinition[])告诉:

重新定义可能会更改方法主体、常量池和 属性。重定义不得添加、移除或重命名字段或 方法、更改方法的签名或更改继承。

attributes是什么意思?我认为它可以是访问修饰符(私有,公共,...),同步,最终和其他修饰符。但是,如果我不仅尝试重新定义方法主体,还尝试重新定义其访问修饰符或类的访问修饰符,或者尝试使方法同步,我得到了

java.lang.UnsupportedOperationException: class redefinition failed: attempted to change method modifiers
        at sun.instrument.InstrumentationImpl.redefineClasses0(Native Method)
        at sun.instrument.InstrumentationImpl.redefineClasses(Unknown Source)

那么在这种情况下attributes是什么?

J2SE5 目前仅支持修改方法主体和字段值。如果您修改访问修饰符,则意味着您完全更改了类的接口。

对于属性,这是Java编程中一个非常模糊的概念,我不知道他们为什么要把这个词放到他们的文档中。当我们说属性时,在大多数情况下,我们指的是 Java 命名 API 中的属性。

重定义类提供了一种动态方法来更改现有系统的运行时行为。我认为被AOP广泛使用。

属性是添加到类文件中的类、方法和字段的附加信息片段。请参阅 Java VM 规范 http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7。附录 A.3 (http://download.forge.objectweb.org/asm/asm4-guide.pdf) 中的 ASM 用户指南中也有对属性的简短描述。

相关内容

  • 没有找到相关文章

最新更新