gpt4 book ai didi

Java 重构具有多态性的互连 switch/if 语句

转载 作者:行者123 更新时间:2023-11-30 07:00:09 25 4
gpt4 key购买 nike

我知道如何通过多态性替换 switch 语句,就像解释的那样 here .

就我而言,我有两个枚举:

public enum EleType {
INTEGER,
CHARACTER
}

public enum SorterType {
BUBBLE,
INSERTION
}

并且 switch/if 我想重构具有以下结构:

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 部分,所以我不确定如何重构这个结构。另外,我不确定如何在不使用条件语句的情况下分别从 EleType.INTEGER 或 EleType.CHARACTER 获取“Integer”/“Character”泛型类型。

最佳答案

你的意思是你这样实现代码吗?

public static <T> SorterComposition<T> createComposition(SorterType type, <Type of randomList>) {
switch (type) {
case BUBBLE:
return new SorterComposition<T>(new BubbleSort<T>(), randomList);
case INSERTION:
return new SorterComposition<T>(new InsertionSort<T>(), randomList);
default:
throw <Exception>
}
}
<小时/>

或者,您可以更改 EleType稍微上课一下。

public enum EleType {
INTEGER(Integer.class), CHARACTER(Character.class);
private EleType(Class cl) { this.classType = cl; }
public Class getClassType() { return classType; }
private final Class classType;
}

并使用此代码代替 createComposition如上所述。

public static <T> SorterComposition<T> createComposition(Class<T> eleType, SorterType type, <Type of randomList>) {
switch (type) {
case BUBBLE:
return new SorterComposition<T>(new BubbleSort<T>(), randomList);
case INSERTION:
return new SorterComposition<T>(new InsertionSort<T>(), randomList);
default:
throw <Exception>
}
}

当你使用它时,使用 composition = createComposition(eleType.getClassType(), sorterType, randomList);

<小时/>

避免 switchSorterType以温和的方式,也许你可以使用添加 Supplier字段输入SorterType .

public enum SorterType {
BUBBLE(() -> new BubbleSort()),
INSERTION(() -> new InsertionSort());

private SorterType(Supplier<Sort> supplier) {
this.supplier = supplier;
}

public Sort getSort() {
return supplier.get();
}

private final Supplier<Sort> supplier;
}

关于Java 重构具有多态性的互连 switch/if 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41062951/

25 4 0
文章推荐: Java按频率非重复有序列表
文章推荐: java - 从外部 clojar 导入/使用资源
文章推荐: java - Jackson - 将 Map 实现反序列化为 HashMap
文章推荐: java - 类型不匹配 : cannot convert from Set to Set