演算子の優先順位表を参照してください。論理和||
は代入よりも優先され=
ます。C
また、言語のファミリーでは、=
が割り当てであり==
、が平等テストであることを認識する必要があります。だから、あなたの表現
if(period = "A"|| "B" || "C" || "D")
と同じ意味
if(period = ("A"|| "B" || "C" || "D"))
期間を「A」または「B」または「C」または「D」に設定し、結果がtrue
. ただし、C とは異なり、logical or はブール値でのみ機能するため、式のその部分はコンパイルされません。それが機能したとしても、結果をテストするのではなく、結果に期間を設定することになります。そして、結果はブール値ではありません。
必要なのは、セット メンバーシップをテストすることです。
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
は災害対策です。私は自分自身から自分を守ろうとします。