我正在尝试重构下一种情况:

  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,然后针对每种情况我还创建了一个对象(SortASortBSortC)。 SortOfType中的函数获取Gen的实例,其他的Sort对象也是如此。我没有成功的是将sortOfType称为Gen类。我该怎么做?可以在这里进行重构吗?

最佳答案

您定义一个需要执行操作时调用的接口

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));
   }
}

10-06 10:58