Я жду ответа "нет" на этот вопрос.
Мне было интересно, можете ли вы сохранить переменную одновременно с проверкой в предложении 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 равен нулю, он остановится и не будет пытаться использовать 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.");
}
Мне бы пришлось разбить его на два разных if, если я бы хотел сделать
Bar bar = foo.getBar();
if (bar!=null) ...