2017-02-20 2 views
-4

Я довольно новичок в Java.Лучший способ заменить многие условия, если условия

Хотелось бы посоветовать, если есть разумный способ заменить множество операторов if.

Проблема: Предположим, у меня есть класс валидатора, который проверяет теги во входящем сообщении. Каждый тег может быть обязательным или не для моего приложения.

Вместо того, чтобы использовать многие, если заявления:

if (isExistTag1) 
else if (isExistTag2) 
else if (isExistTag3) 
. 
. 
. 
else if (isExistTagN) 

что может быть улучшена путем?

спасибо.

+1

Вы пробовали корпус переключателя – SachinSarawgi

+0

Все эти блоки 'if' выполняют одни и те же вещи? Схожие вещи? – khelwood

+1

https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html –

ответ

3

Один из многих возможностей будут использовать список:

private List<String> validTags = Arrays.asList(
    tag1, // 
    tag2, // 
    tag3); 

public boolean isTagValid(String tag) { 
    return validTags.contains(tag); 
} 
1

Если один из ваших условных является true, а остальные всегдаfalse, вы можете использовать либо массив или ArrayList из Runnable с , По существу, у вас будет вся логика, которая живет внутри каждого условного выражения внутри своего собственного метода, который определяется внутри массива или ArrayList. Тогда вам просто нужно будет перевести ваши boolean условных значений в диапазоне, начиная int на 0. В этот момент вы можете просто ссылаться на ArrayList так:

List<Runnable> conditions = new ArrayList<>(); 
conditions.add(new Runnable()->{/*code to execute if condition 0 is true*/}); 
conditions.add(new Runnable()->{/*code to execute if condition n is true*/}); 


conditions.get(translatedBoolean).run(); 

Это немного более изящного подход, и исключит ненужное время обработки, если только ваше последнее условие равно true

Существуют также другие функциональные интерфейсы, которые предоставляет Java, если вам нужно вернуть значение или параметры передачи.

+0

каждый тег может быть истинным или ложным. когда я получил первое ложное, я отброшу входящее сообщение – Asfbar

+0

Можете ли вы предоставить дополнительную информацию о том, как использовать этот список, пожалуйста? Что такое boolean? – Chris311

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