2015-08-16 2 views
-1

В настоящее время я нахожусь в ситуации, когда мне приходится писать java-программу, которая обрабатывает различные методы в виде строк после сканирования. В настоящее время я обрабатываю его с помощью метода, который имеет довольно длинный оператор switch-case, который обрабатывает метод в форме строки. Я не уверен, что это хороший подход или нет, поскольку я думаю, что он выглядит и, вероятно, ведет себя грязно, поэтому я хотел спросить, есть ли лучшее решение для моей проблемы.Альтернатива очень длинному оператору switch-case

+2

Без кода невозможно ответить. Если код работает, возможно, вы захотите попробовать http://codereview.stackexchange.com/, а не SO –

+0

. Я нахожу хорошо отложенный и прокомментированный 'switch' более прозрачным, чем серию' if 'особенно потому, что' if' s, как правило, намного более многочисленны, чем 'switch'es. Но это может быть вопрос, который в первую очередь основан на мнениях. –

+0

Вы можете найти решение здесь [ссылка] (http://codereview.stackexchange.com/questions/42125/refactoring-large-switch-statement). Обзор кода - идеальный сайт для этого типа вопросов. – amaiaeskisabel

ответ

3

Вместо этого вы можете использовать карту.

final Map<String, Consumer<String>> actionMap = new HashMap<>(); 
Consumer<String> defaultAction = ... 
// add actions to the map 
actionMap.put("case 1", s -> { doSomething() }); 
actionMap.put("case 2", s -> { doSomething() }); 
actionMap.put("case 3", s -> { doSomething() }); 

// instead of switch 
String action = ... 
actionMap.getOfDefault(action, defaultAction).apply(action); 

С помощью этой конструкции вы можете выложить свой «ключ» так, как вы хотите, динамически и во многих методов/класса/библиотеки.

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