Java/重构开关盒

标签 java refactoring

我正在尝试重构下一个案例:

  class Gen{
    public void startClick(A a, B b, List<C> lstC, SortX sort){
     for (int i=0; i<lstC.size(); i++){
        try{
        // some code with try and catch statement
         switch (sort){
        case SortA:
              newOne(a, b, lstc);
              break;
        case SortB: 
              otherfunction(a);
              break;
        case SortC:
              someotherfunction(lstC, a);
              break;
          }
       }
      } catch (Exception e){ //some code}
     } 
}

我尝试创建一个对象并将其放入 case 中,就像我们在这里看到的那样:http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism

所以我创建了一个对象:SortOfType,然后我还为每种情况创建了一个对象(SortASortB排序 C)。 SortOfType 中的函数获取 Gen 的实例,其他 Sort 对象也是如此。我没有成功的是调用 Gen 类的 sortOfType。我该怎么做?这种重构在这里是可能的吗?

最佳答案

你定义一个接口(interface),当需要一个 Action 时调用它

public interface SortX {
    public void startClick(A a, B b, C c);
}

public enum SortAEnum implements SortX<A, B, C> {
    SortA {
         public void startClick(A a, B b, C c) {
              newOne(a, b, c);
         }
    }, SortB {
         public void startClick(A a, B b, C c) {
              otherfunction(a);
         }
    }, SortB {
         public void startClick(A a, B b, C c) {
              someotherfunction(c, a);
         }
    }
}

public static void startClick(A a, B b, List<C extends OnClick> lstC, SortX sort){
   for (int i=0; i<lstC.size(); i++){
      sort.startClick(a, b, lstC.get(i));
   }
} 

关于Java/重构开关盒,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20953054/

相关文章:

java - 帮助在 Eclipse 中创建重构插件?

java - Android 应用程序中令人困惑的 java.lang.NullPointerException

java - 在 Java Web 应用程序中处理图像的最佳方法是什么 : storing in Blob fields or just its paths?

java - 获取 Java 方法的调用层次结构,包括存储库中的其他项目

java - 将 AWT 应用程序转换为 SWT/JFace

java - 重构前置代码

java - 父包装子类方法

java - Docker:无法从 Spring Boot docker 镜像连接到 Elasticsearch

java - 如何使用 Java 对 PKCS7 中的值进行编码?

c# - Db4o - 如何一步重命名一个字段?