2017-10-29 18 views
0

EclipseとNetbeansを使用しています。現在はNetbeansが優先されています。 Javaライブラリ(FileReaderなど)にあるシステムクラスを開発する場合、そのクラスをアプリケーションに追加し、ローカルのものをライブラリコピーに置き換える方法はありますか?Javaアプリケーションでライブラリクラスをオーバーライドする方法はありますか?

考えてみると、通常のjdkを使用しながら、特定のクラスを一度に増やすことができます。

具体的には、java.lang.StringBuilderとjava.io.FileWriterを使用しています。

私は変更されたStringBuilderクラスを作成しました。私がディレクトリに作成した場合: java/lang/FastStringBuilder

javacは、制限付きパッケージjava.langをコンパイルしようとしていると言っています。

パッケージの名前を変更した場合、publicではないAbstractStringBuilderから継承することはできません。

彼らは、必要以上に難しくしています。

+4

別のパッケージで同じ名前を使用するだけです。 –

+0

しかし、あなたは 'あなたのクラスが同じ名前を使用する 'ことを意味するのですか、それともあなた自身の実装を提供したいと思いますか? 'java.io.Filereader'? 2番目のケースではクラスパスの作業です。 –

+1

私が考えることができるのは、 '/ lib/ext'です(https://docs.oracle.com/javase/tutorial/ext/basics/install.html)。それが動作するかどうかは分かりません。 – electrotype

答えて

1

代わりの

import java.io.FileReader; 

あなただけの代わりに、標準的な1の実装を使用するように

import package.of.your.FileReader; 

を必要としています。

+0

私はStringBuilderで作業しています。別のパッケージに作成すると、非publicクラスのAbstractStringBuilderへのアクセスは共有されません。 – Dov

+0

@Dov - そうはなりません。 'java.util.MyStringBuilder'を作成すると、' java.util'パッケージのすべての非公開クラスとその非公開クラスとそのプロパティ/メソッドになります。しかし、それでもjava.util.StringBuilderはオーバーライドされません。ちょうど 'StringBuilder'と' MyStringBuilder'クラスがあります。 – Vadim

4

Javaでは本当に本当に悪い考えです。

独自のFileReaderが必要ですか? - あなたのパッケージに入れて、それを使用してください。

標準のFileReaderのメソッドを使用する必要がありますか? - それを自分のFileReaderで拡張またはラップして使用します。

しかし、JDKやその他のサードパーティのフレームワークではどこからでも、どのライブラリからでもクラスを置き換えることは決してありません。

非常にまれで悪いケースでは、AOPを使用できますが、それは本当に痛いだけでなく、別の「良い悪いアイデア」です。

+0

もし私がライブラリクラスの変更をJavaに戻すよう提案しているのであれば、すべてのソースコードでプロジェクトをビルドする必要はなく、プロジェクト内で試してみたいクラスを編集するだけです。いくつかの回避策があるはずです。私は、データを共有するためにデフォルトのアクセスを使用するファイルが同じパッケージ内に存在しない限り、パッケージ名を変更するだけの良い方法かもしれないと思います。 – Dov

+0

別のパッケージ名を使用すると、「上書き」と呼ばれることはありません。別のパッケージの別のクラスであり、もちろん正しいJavaアプローチです。あなたは自分のクラスを作った - それを使う。標準的な実装はありますが、あなたはそれを使用しません。大丈夫。しかし、あなたのクラスを過負荷にすることを考えると(「標準のものを置き換える」と言えば)、決してそれをしないでください。 – Vadim

関連する問題