次のような Java クラスがあります。
public final class Node {
public Node() {}
}
リフレクション API を介して 'final' フィールドのアクセシビリティを変更する方法を既に学びましたが、これはクラスでも可能ですか? 実行時に最終クラスを非最終クラスに変更できますか?
次のような Java クラスがあります。
public final class Node {
public Node() {}
}
リフレクション API を介して 'final' フィールドのアクセシビリティを変更する方法を既に学びましたが、これはクラスでも可能ですか? 実行時に最終クラスを非最終クラスに変更できますか?
ASM などのライブラリを使用して、クラス ファイルを書き換えることができます。
final
サブクラスをコンパイルするためにコンパイル時に非最終である必要があるため、実行時にクラスのステータスを変更しても意味がない場合があります。
コンパイル時に非最終クラスにしようとしているクラスをコンパイラがチェックするため、これがどのように機能するかわかりません。継承しようとするとエラーになります。
興味があれば質問してもいいと思いますが、より大きな質問は、なぜこれをやりたいのかということです。リフレクションを使用すると、ファイナルやプライベートなどを回避するために多くのことを実行できますが、それが良いアイデアであるとは限りません。サード パーティのライブラリの設計者が final が良いアイデアだと考えた場合は、それを尊重することをお勧めします。