2014-12-24 2 views
0

У меня есть класс, который строит строку последовательно вызывающими функциями.Возможно сохранение порядка вызова функций в списке?

private String mString; 
addFoo(); 
addBar(); 
addBaz(); 

Однако в среде RTL, мне нужно построить строку в обратном направлении, то есть порядок вызова функции должен быть:

addBaz(); 
addBar(); 
addFoo(); 

Можно ли сохранить этот порядок вызова в списке, так что я могу просто пересечь его в обратном направлении в среде RTL? Я стараюсь избегать дублирования потока, так как я знаю, что он будет полностью отменен. Есть ли лучшее решение, чем тот, о котором я думаю?

+0

Обратите внимание, что простое изменение слова не будет работать, потому что есть разные типы форматирования и пролеты применяется к строке , –

ответ

1

Вы можете указать enum.

public enum FunctionCalls{ 
     ADDFOO,ADDBAR,ADDBAZ; 
} 

, а затем определить List<FunctionCalls>, затем итерацию по списку вперед или назад и switch с дела быть ваши вызовы функций.

switch(functionCall){ 
     case ADDFOO: addFoo(); 
     case ADDBAR: addBar(); 
     case ADDBAZ: addBaz(); 
} 
+0

Не очень многоразовый и эволюционирующий. Что делать, если у него есть сотня различных действий? – Dici

+0

затем проиндексируйте их как цифры? Idk вы можете сделать это без отражения (не очень безопасно для пользовательского приложения) или определить что-то вроде этого –

+0

Интерфейс на самом деле намного лучше здесь – Dici

3

Вы можете определить интерфейс, такой как

public interface Action { 
    public void performAction(); 
} 

и хранить List<Action>. Затем просто переместите список в обратном порядке. Вы также можете использовать Deque<Action>: сначала вы нажимаете на действия, а затем выкладываете их до тех пор, пока дека не будет пуста. Выберите это решение, если вам не нужно отслеживать действия после их выполнения в обратном порядке. В противном случае используйте LinkedList для улучшения характеристик.

Если вы используете Java 8 и имеете всего несколько различных действий, вы можете определить их с помощью лямбда-выражений. Например:

Action a =() -> System.out.println("Hello world"); 

Если вы используете Java 7 или менее, использовать анонимные классы:

Action a = new Action() { 
     @Override 
     public void performAction() { 
      System.out.println("Hello world"); 
     } 
} 
+0

Да, я просто подумал об этом в своем редактировании – Dici

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