Кілька днів тому я зіткнувся із захоплюючим сценарієм, що не зміг знайти жодної документації про те, як і чому Java дозволяє зробити таке. (Цей фрагмент - це просто спрощена форма помилки.)
@Test
public void test() {
boolean bool = false;
Integer intVal = Integer.valueOf(5);
Long longVal = null;
Long result = bool ? intVal : longVal;
System.out.println(" > " + result);
}
у фрагменті вище:
якщо bool = true, то ви отримуєте значення '5';
але якщо bool = false, то ви отримуєте нульовий виняток вказівника при спробі оцінити потрійну операцію. НЕ заяву про друк.
Щоб виправити це, я просто змінюю "результат" на
Long result = bool ? Long.valueOf(intVal) : longVal;
Це призведе до потрібної мені поведінки:
якщо bool = true, то ви отримуєте значення '5';
але якщо bool = false, то ви отримуєте 'null'
Тепер цікавою частиною є те, що якщо ви розділите це на звичайний оператор if / else, то java НЕ дозволяє вам компілювати
longVal = intVal;
але це не сприймає це через термінального оператора. Отже, що робить Java, щоб зробити її нульовою точкою в оригінальному фрагменті?
(java 11)