java.util.Scanner
Java API は優れていますが、現在取り組んでいるプロジェクトのデフォルト API パッケージ (たとえば ) のいくつかのクラスのコードを変更する必要があります。
理想的には、興味のあるクラスを拡張して独自のサブクラスを作成しますが、拡張したいクラスは「final」と宣言されています。これをどのように提案しますか?これらのパッケージのソース コードをカスタマイズすると、コンパイラで問題が発生しますか?
java.util.Scanner
Java API は優れていますが、現在取り組んでいるプロジェクトのデフォルト API パッケージ (たとえば ) のいくつかのクラスのコードを変更する必要があります。
理想的には、興味のあるクラスを拡張して独自のサブクラスを作成しますが、拡張したいクラスは「final」と宣言されています。これをどのように提案しますか?これらのパッケージのソース コードをカスタマイズすると、コンパイラで問題が発生しますか?
可能であれば、別の回答で提案されているように、ラップして委任する必要があります。アダプタ パターンを参照してください。
しかし、本当に必要な 場合はもちろん、これを行う方法があります。
簡単な方法は、ダウンロードしたソースのコードを単純に変更し、クラスパス内の独自のバージョンの jar に置き換えることです。
もう 1 つのオプションは、アスペクト指向プログラミング手法を使用することです。おそらくAspectJを使用して、必要に応じて呼び出しをインターセプトおよび変更します。
リフレクションと自作のクラスローダーを使用してソリューションをハックすることも可能かもしれませんが、コーディングするのは面倒です。
ただし、これらはすべて、自分が何をしているのかわからない場合、非常に危険です。多くの場合、クラスは正当な理由で最終的なものになります。
何を変更したいのかをより具体的に教えていただければ、現在必要と考えているものを回避するための支援を提供できる場合があります.
あなたは本当に最終クラスを拡張することはできません..
クラスを拡張して機能を追加したい場合は、クラス src を変更することで実行できます。JDKから独自のクラスとして保存して使用します。
そうしないでください。元のスキャナーをラップする独自のコードを作成し、それを使用します。内部パッケージを更新endorsed
するために、実行時に提供できるディレクトリプロパティがあります。
絶対にしないでください!コア クラスを変更しないでください。クラスが final の場合 - 継承ではなく構成を使用します。