2012-10-17 46 views
2

Java平台SE的方法5 API规范Instrumentation.redefineClasses(ClassDefinition[])告诉限制:Java。阶级重新定义

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

什么意思是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在这背景?

回答

2

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

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

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

+0

“对于属性,这在Java编程中是一个非常模糊的概念” - 实际上我没有得到这个短语。你什么意思? – Male

+0

在Java中,人们很少会说“属性”。关于“属性”是什么没有官方定义。 – StarPinkER