Тернарный оператор не является заявлением
У меня есть следующее троичное выражение:
((!f.exists()) ? (f.createNewFile() ? printFile() : throw new Exception("Error in creating file")) : printFile());
По одной или нескольким причинам, по которым я не знаю, идея IDE говорит мне, что это не утверждение. Зачем?
4 ответа
Решение
Это неверно, вам нужно вернуть значение
printFile() : throw new Exception("Error in creating file")
Попробуй это
if(f.exists() || f.createNewFile()) {
printFile();
}else{
throw new Exception("Error in creating file");
}
Похоже, вы используете его как заявление, а не как назначение
Из того, что ТАК говорит, что это невозможно
Я думаю, что вам нужно вернуться к условию if-else, как это:
if (!f.exists()) {
try {
f.createNewFile();
printFile();
} catch(Exception e ) {
System.out.println("Error in creating file");
}
} else {
printFile();
}
Операторы в троичном операторе должны быть не пустыми. Им нужно что-то вернуть.
Пример:
- Рассмотрим случай, когда переменная count увеличивается, и я проверяю ее значение и возвращаю true или false выше определенного порога.
System.out.println((count >10 ? true: false));
- По сравнению с,
count >10 ? true: false
где компилятор будет жаловаться, что это не утверждение.
Конструкция "COND? Statement: Statement" является выражением. Это не может быть использовано как утверждение. Без присваивания его можно использовать в ситуации, такой как разрешение аргумента условия при вызове функции или конкатенации строк.
Func( (COND ? param1 : param2) );
"Hi"+(con?"Miss":"Mr.")+"";