0

java.util.ScannerJava API は優れていますが、現在取り組んでいるプロジェクトのデフォルト API パッケージ (たとえば ) のいくつかのクラスのコードを変更する必要があります。

理想的には、興味のあるクラスを拡張して独自のサブクラスを作成しますが、拡張したいクラスは「final」と宣言されています。これをどのように提案しますか?これらのパッケージのソース コードをカスタマイズすると、コンパイラで問題が発生しますか?

4

4 に答える 4

4

可能であれば、別の回答で提案されているように、ラップして委任する必要があります。アダプタ パターンを参照してください。

しかし、本当に必要な 場合はもちろん、これを行う方法があります。

簡単な方法は、ダウンロードしたソースのコードを単純に変更し、クラスパス内の独自のバージョンの jar に置き換えることです。

もう 1 つのオプションは、アスペクト指向プログラミング手法を使用することです。おそらくAspectJを使用して、必要に応じて呼び出しをインターセプトおよび変更します。

リフレクションと自作のクラスローダーを使用してソリューションをハックすることも可能かもしれませんが、コーディングするのは面倒です。

ただし、これらはすべて、自分が何をしているのかわからない場合、非常に危険です。多くの場合、クラスは正当な理由で最終的なものになります。

何を変更したいのかをより具体的に教えていただければ、現在必要と考えているものを回避するための支援を提供できる場合があります.

于 2012-06-18T11:11:30.243 に答える
1

あなたは本当に最終クラスを拡張することはできません..

クラスを拡張して機能を追加したい場合は、クラス src を変更することで実行できます。JDKから独自のクラスとして保存して使用します。

于 2012-06-18T10:57:28.287 に答える
-2

そうしないでください。元のスキャナーをラップする独自のコードを作成し、それを使用します。内部パッケージを更新endorsedするために、実行時に提供できるディレクトリプロパティがあります。

于 2012-06-18T10:55:06.930 に答える
-2

絶対にしないでください!コア クラスを変更しないでください。クラスが final の場合 - 継承ではなく構成を使用します。

于 2012-06-18T10:58:23.453 に答える