Я как бы жду отрицательного ответа на этот вопрос.
Мне интересно, можно ли сохранить переменную одновременно с ее проверкой в предложении if.
Предположим, у меня есть этот код.
if(foo!=null){
if(foo.getBar()!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
} else {
System.out.println("Failure.");
}
Теперь я обрабатываю состояния «отказа» независимо, даже если результат тот же. Я мог бы собрать их вот так:
if(foo!=null && foo.getBar()!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
Код уже намного аккуратнее. если foo имеет значение null, он остановится на этом и не будет пытаться использовать foo.getBar (в if), поэтому я не получу NPE. Последнее, что я хотел бы улучшить, и главный вопрос: действительно ли я дважды вызвал foo.getBar()? Было бы неплохо отказаться от второго идентичного вызова, если бы getBar() был бы очень тяжелой операцией. Поэтому мне интересно, можно ли как-то сделать что-то подобное:
if(foo!=null && (Bar bar = foo.getBar())!=null){
Bar bar = foo.getBar();
System.out.println("Success: " + bar);
} else {
System.out.println("Failure.");
}
Мне пришлось бы снова разбить это на два разных «если», если бы я захотел это сделать
Bar bar = foo.getBar();
if (bar!=null) ...
Подробнее здесь: https://stackoverflow.com/questions/564 ... -if-clause