c.getCollectibles()[i][j].isCollected() ? collectiblePanels[i][j].setSplash(c.getCollectibles()[i][j].getIcon()) : repaint();
Я пишу программу на Java, и в моей программе есть ошибка. Я использую условный оператор. c.getCollectibles()
возвращает двумерный массив класса Collectible
, а isCollected()
— это нестатический общедоступный метод в классе Collectible
, который возвращает значение boolean
.
collectiblePanels
— это двумерный массив класса, который содержит метод setSplash()
. Метод setSplash()
принимает тот же тип, который возвращает getIcon()
(детали не имеют отношения к ошибке). В целом, setSplash()
равно void
.
repaint()
— метод случайных пустот. Опять же, конкретика не имеет отношения к ошибке.
Конкретная ошибка приведена ниже:
The left-hand side of an assignment must be a variable
Syntax error on token "?", invalid AssignmentOperator
Syntax error on token ":", ; expected
Я пробовал то же самое, используя стандартный формат if-else, и ошибок не возникает. Это похоже на очень своеобразную ошибку на стороне Oracle или очень глупую ошибку на моей.
JLS-15.25. Условный оператор
? :
говорит явно Это ошибка времени компиляции, если второе или третье выражение операнда является вызовом метода <58456930122014>596.<508 Здесь оба являютсяvoid
.Используйте последнее, определенно последнее - это ошибка в вашем понимании того, как работает тернарный оператор. Но все это легко найти, если вы будете искать в Google свое сообщение об ошибке. Например
Вы обнаружили на собственном горьком опыте, что условный оператор не является заменой оператора
if
. Живи и учись, мой друг :-)Спасибо еще раз. После того, как я лучше ознакомился с тем, как java обрабатывает условный оператор, я чувствую себя немного глупо с этим вопросом.