Во-первых, ваш альтернативный синтаксис внутри .equals()
не является допустимым Java.
Если у вас нет более чем нескольких тестов, и в каждом из них есть цикломатическая сложность в каждом условии, нет никаких веских причин делать то, что вы просите.
Тем не менее, вам нужно перевернуть проблему с ног на голову и сделать что-то вроде следующего:
interface Handler { public void handle(); }
final Map<String, Handler> symbols = new HashMap<String, Handler>();
symbols.put("+", new Handler() {
public void handle() { System.out.println("Got +"); }
};
symbols.put("-", new Handler() {
public void handle() { System.out.println("Got -"); }
};
symbols.put("*", new Handler() {
public void handle() { System.out.println("Got *"); }
};
Тогда логические тесты сводятся к:
symbols.get(queryArray[1]).handle();
Это не будет быстрее, чем отдельная конструкция if/elseif/else
, но она делает что-то вроде того, что вы ищете, чтобы уменьшить количество строк кода.
Это обычный шаблон объектно-ориентированного проектирования, это вариант шаблона Chain of Responsibility .
Это очень полезно, когда в конструкции if/elseif/else
есть много альтернатив и логика в каждой альтернативе сложна.
Это упрощает добавление альтернатив, как реализация интерфейса и добавление альтернативы к Map
.
Это также делает обслуживание очень простым. Потому что это способствует инкапсуляции правил и сплоченности логики. Нечто, что полностью теряется в очень больших if/elseif/else
блоках.
Вам не нужно использовать Anonymous Inner Classes
, как в моем примере, это могут быть обычные классы, которые находятся в их собственных файлах, или обычные внутренние классы.