У меня есть переменная, x
.Наиболее сжатый способ выразить этот Java условный, не проверяя значение дважды
Я хочу назвать метод m()
только в том случае, еслиx
является одним из двух возможных значений.
При вызове m()
я хочу передать ему аргумент, значение которого зависит от значения x
.
Есть ли способ сделать это в Java без проверки значения x
более чем один раз, и вызов/запись m()
только в одном месте (т.е. не в нескольких ветвях if
заявления)?
Одно из решений я развлекая:
switch (x) {
case 1:
y = "foo";
break;
case 2:
y = "bar";
break;
default:
y = null;
break;
}
if (y != null) m(y);
Но я не могу помочь, но чувствую, что это технически проверки x
дважды, просто скрывая этот факт, добавив «прокси» для повторной проверки.
(Чтобы уточнить, почему ограничения являются такими, какими они являются: при чтении кода у меня есть логика понимания времени, которая много разветвляется, когда существует высокая степень дублирования между ветвями - она становится игрой «пятно разницы» «вместо того, чтобы просто видеть, что происходит. Я предпочитаю агрессивно реорганизовывать такое дублирование, что является привычкой, которая хорошо мне помогает в Ruby, JS и других языках, я надеюсь, что смогу научиться делать то же самое для Java и сделать код более легким для меня и других, чтобы понять с первого взгляда.)
Создайте 'Map ', чтобы заполнить его значениями для' 1' и '2', а затем использовать' map.get (x) '- никаких проверок не требуется. –
@ElliottFrisch Является ли Карта действительно лучшим решением, чем просто ломать его логику в двух разных выражениях 'if'? Если это произойдет много, я бы понял, но для небольшого количества этого случая ваше решение действительно интересно? – MadJlzz
Ваш первый пример не работает вообще, он будет иметь тот же результат для 1 и 2. –