2014-01-06 2 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. То, что я не делаю, - это вызвать sortOfType для класса Gen. Как я могу это сделать? этот рефакторинг возможен здесь?

+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, инвентарь не дополняется –

Смежные вопросы