8

バイトコード操作を使用して最終クラスを継承することは可能ですか?

4

2 に答える 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 に答える