加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java / Refactoring开关案例

发布时间:2020-12-15 04:16:48 所属栏目:Java 来源:网络整理
导读:我试图重构下一个案例: class Gen{ public void startClick(A a,B b,ListC lstC,SortX sort){ for (int i=0; ilstC.size(); i++){ try{ // some code with try and catch statement switch (sort){ case SortA: newOne(a,b,lstc); break; case SortB: other
我试图重构下一个案例:

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

我尝试创建对象并对其进行处理,就像我们在这里看到的那样:http://sourcemaking.com/refactoring/replace-conditional-with-polymorphism

所以我创建了一个对象:SortOfType,然后对于每种情况,我也创建了一个对象(SortA,SortB,SortC). SortOfType中的函数获取Gen的实例,以及其他Sort对象.我没有成功的是调用类Gen的sortOfType.我该怎么做?这种重构是可能的吗?

解决方法

您可以定义在需要操作时调用的接口

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读