Я как бы жду ответа "нет" на этот вопрос.
Мне было интересно, если вы можете сохранить переменную одновременно, когда вы проверяете ее в if-clause.
Скажем, у меня есть этот код.
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) ...