您将需要查阅运算符优先级表。逻辑或,||
具有比赋值更高的优先级,=
。此外,您需要认识到,在C
语言家族中,=
是赋值,==
而是相等测试。所以,你的表情
if(period = "A"|| "B" || "C" || "D")
意思是一样的
if(period = ("A"|| "B" || "C" || "D"))
将 period 设置为“A”或“B”或“C”或“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
是防灾;我试图保护自己免受自己的伤害。