Я пытаюсь использовать универсальный тип с троичным выражением для выполнения выражений, которые не возвращают значение. Вот мой класс:
static class Generic<T> {
T t;
}
public static Generic generic = new Generic();
Я выполняю простую команду. Компилятор Java не выдает никаких ошибок для my_a += 1
, но запрещает my_b += 1
.
generic.t = X ? my_a += 1 : my_b += 1;
Мой вопрос: почему он не допускает второе выражение?
В основном это экспериментальный фрагмент кода. Я просто пытаюсь понять, как работает тернарный код в Java и почему я не могу использовать +=
в my_b += 1
.
код:
bool X = true;
int my_a = 0;
int my_b = 0;
generic.t = X ? my_a += 1 : my_b += 1;
Исключение:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Syntax error on token "+ = ", + expected
Изменение my_b += 1;
на my_b++
успешно компилирует и выполняет код. Я ожидал, что код будет выполняться с my_b += 1;
, поскольку универсальный тип предназначен для совместимости с различными типами данных.
Какие бывают типы my_a
и my_b
?
вы хотите «понять, как работает тройной оператор», но смешиваете дженерики и составное присваивание с тернарным оператором... довольно смело... в любом случае, лучше всего включить минимальный воспроизводимый пример в вопрос
public static Generic generic = new Generic();
- вы используете сырой тип, которого лучше избегать. Вы должны указать, например. public static Generic<Integer> generic = new Generic<>();
Кроме того, вы говорите «выражения, которые не возвращают значение». На самом деле my_b += 1
действительно возвращает значение; это то же самое, что ++my_b
, который является int
. Например, вы можете сделать int my_c = (my_b += 1);
Правила приоритета операторов здесь шаткие. Вам нужны скобки. Это отлично работает:
generic.t = X ? (my_a += 1) : (my_b += 1);
Вы ничего не показали нам о
my_a
илиmy_b
, и, похоже, вы создаете экземпляр необработанного типаGeneric
. Без минимально воспроизводимого примера сложно воспроизвести проблему самостоятельно или предложить изменение. (Лично я бы начал с удаления здесь любых общих аспектов. Трудно представить, какmy_a += 1
вернет что-то совместимое сT
, вообще...)