switch文をポリモフィズムで置き換える方法については、hereのように説明しています。私の場合はJavaリファクタリング多相対応スイッチ/ if文
しかし、私は2つの列挙型を持っている:
public enum EleType {
INTEGER,
CHARACTER
}
と
public enum SorterType {
BUBBLE,
INSERTION
}
およびスイッチ/私はリファクタリングしたい場合は、以下の構造を有する:
if (eleType == EleType.INTEGER) {
switch (sorterType) {
case BUBBLE:
composition = new SorterComposition<Integer>(new BubbleSort<Integer>(), randomList);
break;
case INSERTION:
composition = new SorterComposition<Integer>(new InsertionSort<Integer>(), randomList);
break;
}
} else if (eleType == EleType.CHARACTER) {
switch (sorterType) {
case BUBBLE:
composition = new SorterComposition<Character>(new BubbleSort<Character>(), randomList);
break;
case INSERTION:
composition = new SorterComposition<Character>(new InsertionSort<Character>(), randomList);
break;
}
}
ので、両方の列挙型が一緒に表示され、どちらもSorterComposition部分に影響します。この構造体をどのようにリファクタリングするかはわかりません。また、 "Integer"/"Character"ジェネリック型を、それぞれ、条件文を使わずにEleType.INTEGERまたはEleType.CHARACTERから取得する方法がわかりません。
私の第二の問題(EleTypeからInteger.classへのマッピングなど)を解決しているようです。しかし、私はまだ何とかswitch文を取り除きたい。 – user1583209
アップデートのコードはどうですか? 'EleType'にフィールドを追加し、' createComposition'を呼び出すときに 'eleType.getClassType()'を渡します。 – EmOwen
これはどのように 'SorterType'のスイッチを取り除きますか? – user1583209