共通のコードを共有する一連のクラスA
、、、 ... (合計B
で数十個) があります。C
各クラスの多くのインスタンスが存在する可能性がありますA
, B
, C
.... Abstract
代わりにそのコードを含むスーパークラス を作成する予定です。
問題は、共通のものは、クラスごと (インスタンスごとではなく) で一意のオブジェクトで機能することです。これは現在、対応する値を持つ静的フィールドを持つA
、B
、 ...によって解決されています。C
明らかに、機能を にリファクタリングする場合Abstract
、これを別のものに変更する必要があります。
実際には、現在、次のようになっています (実際の型は ではないことに注意してくださいString
。これは説明のためのものです)。
public class A implements CommonInterface {
private static final String specificVar = "A";
@Override
public void common() {
specificVar.contains('');
}
}
public class B implements CommonInterface {
private static final String specificVar = "B";
@Override
public void common() {
specificVar.contains('');
}
}
私がこれまでに思いついた最良のアイデアは、Map<Class<? extends Abstract>,K>
(関連する型はどこにK
あるのか) に静的フィールドをAbstract
持ちA
、関連する値をマップに配置する静的初期化ブロックをそれぞれに含むことですB
。C
ただし、これが最善の方法であるとは確信していません。
私はDIフレームワークを使用していないことに注意してください。
では、サブクラスに含まれるコードに関して、フィールド アクセスの効率を犠牲にすることなく、共通コードによって処理される, , ...の静的フィールドをリファクタリングする最も簡潔な方法は何でしょうか?A
B
C