Полагаю, это показывает, что логический тип Java не работает в каждом случае, и что троичный оператор не всегда эквивалентен явно эквивалентной конструкции if-else.
Я также хочу заявить избегать null
. Также избегайте прохождения Iterator
s, потому что у них странное поведение с состоянием (предпочитайте Iterable
). Однако, если у вас есть законные, преждевременные причины для этого, мой предпочтительный способ написать это будет
public Iterator<Foo> iterator() {
return getUnderlyingData().iterator();
}
private List<Foo> getUnderlyingData() {
if (underlyingData == null) {
return Collections.emptyList();
} else {
return underlyingData;
}
}
ИМО, лучше не вставлять информацию о заменимом типе, если она может быть выведена (даже если она удлиняет ваш код).
Вы почти наверняка собираетесь сделать это более одного раза, поэтому вставьте метод getUnderlyingData
вместо простого объявления локальной переменной.
Вы звоните iterator
по обоим результатам, поэтому не повторяйте себя.