3

メソッドの 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では、この文脈には何がありますか?

4

2 に答える 2

2

J2SE5 は現在、メソッド本体とフィールドの値の変更のみをサポートしています。アクセス修飾子を変更すると、クラスのインターフェイスが完全に変更されます。

属性については、Java プログラミングでは非常にあいまいな概念です。なぜ彼らがこの単語をドキュメントに入れているのかわかりません。属性と言う場合、ほとんどの場合、Java Naming API の属性を意味します。

再定義クラスは、既存のシステムの実行時の動作を動的に変更する方法を提供します。AOPで広く使われていると思います。

于 2012-10-17T02:28:17.837 に答える
2

属性は、クラス ファイル内のクラス、メソッド、およびフィールドに追加される追加情報の断片です。Java VM 仕様http://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7を参照してください。付録 A.3 の ASM ユーザー ガイド ( http://download.forge.objectweb.org/asm/asm4-guide.pdf ) には、属性の簡単な説明もあります。

于 2013-10-09T12:15:04.693 に答える