ほとんどのシングルトンクラスと同様に、プライベートコンストラクタでクラスを「拡張する」標準的なテクニックはありますか?具体的には、java.lang.management.ThreadInfo
クラスを拡張しようとしています。これは、一意性を制御するためにHashSet
に多くを追加するためです。しかし、2つのスレッドが等しいかどうかを判断する方法は、equals()
メソッドのデフォルトの実装とは異なり、同じではありません。プライベートコンストラクタでクラスを拡張するためのテクニック
この場合、クラスの拡張は明らかにオプションではありません。
コンストラクタでThreadInfo
を受け入れ、その後、手動で値を使用して、関連するすべてのフィールドを移入するラッパークラスのようなものを作ることが合理的である、そしてequals()
とhashCode()
を上書きし、またはこれを行うには良い方法はありますか?このような
何かが私が書くために始めているものですが、より良い実装が理想的である:
class ThreadInfoWrapper {
private ThreadInfo info;
ThreadInfoWrapper(ThreadInfo info) {
this.info = info;
}
//Populate instance variables with Thread.State, thread ID, etc.. with
//Getters/setters and all that other stuff
public boolean equals(Object o) { //Unique implementation
}
public int hashCode() { //Whatever implementation
}
}
しかし、これは、いくつかの基本的な機能を達成するための非常に遠回りのように感じています。 Javaの標準ライブラリにカスタムコンパレータを使用したセットの実装が存在しません。私は自分のハッシュセット実装を書くことができると思いますが、それは簡単な状況ではあまりにも多くの作業です。どんな洞察も役に立つでしょう。
私はこのようなクラスを拡張することはできません。 –
@JakobWeisblat実際には、それらは拡張することができますが、この状況では役に立たない内部クラスによってのみ拡張できます。自分のクラスファイルでそれらを拡張することはできません。私は妥当な選択肢を探していて、特に標準的なプラクティスがあるかどうかを確認しています。私はちょっと探した後に何も見つかりませんでした。その後、 – Kon
幸運。 –