首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java语言。对类重新定义的限制

Java语言。对类重新定义的限制
EN

Stack Overflow用户
提问于 2012-10-17 01:42:12
回答 2查看 5.7K关注 0票数 3

Java SE5API的方法Instrumentation.redefineClasses(ClassDefinition[])规范告诉我们:

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

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

代码语言:javascript
复制
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是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-17 02:28:17

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

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

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

票数 2
EN

Stack Overflow用户

发布于 2013-10-09 12:15:04

属性是添加到类文件中的类、方法和字段的附加信息的一部分。请参阅java规范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用户指南中也有对属性的简短描述。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12925919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档