バイトコード操作を使用して最終クラスを継承することは可能ですか?
質問する
565 次
2 に答える
4
はいといいえ。
バイトコード操作を使用して、final
クラスを非final
オンザフライに変更できます。これにより、バイナリ互換性が損なわれることさえないため、クラス ローダー/検証エラーのリスクはありません。
ただし、final
クラス自体にバイトコードの変更を適用する必要があります。final
子クラスでバイトコード操作を行って、親クラスから継承させることはできません。より正確には、変更された子クラスは、final
親クラスと一緒に読み込まれたときにベリファイアによって拒否されます。
于 2013-02-25T13:19:15.083 に答える
0
クラスファイルのフォーマットについて説明します。オフセット10+cpsize
には、このクラスのアクセス フラグを定義する 2 バイトがあります。これらのフラグの 1 つはACC_FINAL (0x0010)と呼ばれます。そのビットをマスクして、そのクラスを非最終にすることができると思います。
于 2013-02-25T12:57:00.840 に答える