我有一个通用映射器类,其方法确定应使用哪个转换器实现。其指示符是一个枚举。该方法如下所示:
private void test() throws Exception {
MyEnum nameEnum = ...
ITransformer myTransformer;
switch (nameEnum) {
case ENUM1:
mytransformer= new TransformerImpl1(this);
mytransformer.doUnmarshal();
break;
case ENUM2:
mytransformer= new TransformerImpl2(this);
mytransformer.doUnmarshal();
break;
case ENUM3:
mytransformer= new TransformerImpl3(this);
mytransformer.doUnmarshal();
break;
...// 40 x
}
}
我知道如何填充静态映射以避免此类 switch/case 语句,但在这里我必须返回类的实例,所以我认为这行不通。
我认为我也无法向枚举本身提供选择哪个转换器的信息,因为我必须将 MapperClass 作为参数提供给转换器实现。
但我认为必须有一个解决方案来避免这么长的 switch/case 语句,即使在我的例子中,类具有“不太好的”耦合。
最佳答案
你可以有这样的东西:
public enum MyEnum {
ENUM1(new TransformerImpl1()),
ENUM2(new TransformerImpl2()),
ENUM3(new TransformerImpl3()),
ENUM4(new TransformerImpl4());
ITransformer myTransformer;
MyEnum(ITransformer myTransformer){
this.myTransformer=myTransformer;
}
public ITransformer getTransformer() {
return this.myTransformer;
}
}
然后获取枚举实例的转换器并进行解码
关于java - 如何避免长 switch/case 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27740478/