Вам необходимо обратиться к operator precedence table. Логический или, ||
имеет более высокий приоритет, чем назначение, =
. Кроме того, вам необходимо признать, что в семействе языков C
=
- это назначение, а ==
- это тест равенства. Таким образом, ваше выражение
if(period = "A"|| "B" || "C" || "D")
означает то же самое, как
if(period = ("A"|| "B" || "C" || "D"))
установленного периода до «А» или «В» или «С» или «D» и посмотреть, если результат равен true
. Но логично или работает только с булевыми, в отличие от C, так что эта часть выражения не будет компилироваться. Даже если это сработало, вы будете устанавливать период на результат вместо его тестирования. И тогда результат не будет логическим.
Что вам нужно, чтобы проверить членство набора:
private final Set<String> legalPeriods;
static {
Set<String> set = new HashSet<>();
set.add("A");
set.add("B");
set.add("C");
set.add("D");
legalPeriods = Collections.unmodifiableSet(set);
}
Затем написать тест как:
if (legalPeriods.contains(period)) {
this.period = period;
}
Это больше работы, но она объясняет себя очень хорошо. Призыв к unmodifiableSet
является аварийным; я пытаюсь защитить себя от себя.
Спасибо большое :) –