Можем ли мы использовать команду в троичном операторе (Java)? - PullRequest
0 голосов
/ 23 января 2020

Это рабочий код:

String a = "first";
String b = "second";
String object;
System.out.println(object != null ? a : b);

Но это не так:

String a = "first";
String b = "second";
String object;
object != null ? System.out.println(a) : System.out.println(b);

Почему?

Ответы [ 2 ]

3 голосов
/ 23 января 2020

A на spe c

Это ошибка времени компиляции, когда второе или третье выражение операнда является вызовом метода void.

println - это метод из класса PrintStream (экземпляр которого System.out), и он имеет тип возврата void.

Учтите, что ожидается, что сам оператор вернет что-то для использования в таких случаях, как:

 bool a = true;
 int b = a ? 1 : 2;

Если вы дадите метод, возвращающий void (т.е. ничего) в качестве второго и / или третьего выражения, что будет оператор само возвращение?

Наконец, Java не имеет лексической структуры, которая называется «команда». System.out.println - это вызов метода, как и любой другой, он просто ничего не возвращает.

1 голос
/ 23 января 2020

Тернарный оператор всегда должен возвращать значение, тогда как в случае SysOut тип возвращаемого значения void.

...