2014-01-06 117 views
3

我試圖重構下一個案例:的Java /重構開關的情況下

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。我該怎麼做?這個重構是可能的嗎?

+0

有作爲'exception'沒有這種東西的作用被稱爲界面,並沒有'lstc'變量存在。但是,有一個'Exception'和'lstC'變量。我不確定'clase'是什麼...... – Doorknob

+0

我不太明白你在這裏試圖做什麼。你能清除那個嗎? – Woot4Moo

回答

7

你定義它時,需要

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

我原本編輯你的代碼,以糾正我認爲是一個小錯誤,現在我想我需要離開你去做那件事。你的意思是讓'SortAEnum實現SortX '還是你的意思是'SortAEnum實現SortX'?另外,你的枚舉中有兩個'SortB'值。 –

+0

但是A,B,C對象不在SortAEnum的同一個項目中,這些implements並沒有補充 –