java - 如何避免长 switch/case 语句?

标签 java optimization

我有一个通用映射器类,其方法确定应使用哪个转换器实现。其指示符是一个枚举。该方法如下所示:

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/

相关文章:

sql - WHERE 子句中的 "Conditional Conditions"(应用哪个条件取决于 "mode"标志)

python - 从大字典中弹出 N 项的最快方法

php - 您应该在 MySQL 中准确指定列类型吗?

java - 将 UUID 拆分为 3 个字符组

java - 单击按钮更改 TextView LayoutParameters

java - 如何在 java 接口(interface)中使用泛型?

java - 对不适用于 Lollipop 的应用程序中的所有文本使用自定义字体

javascript - 优化具有数千个点的图表的网络流量

optimization - 优化像素处理循环

java - 如何更改程序图标