operator precedence table을 문의하십시오. 논리 또는 ||
은 할당보다 높은 우선 순위를 갖습니다. =
. 또한 C
계열의 언어에서 =
이 할당이고 ==
은 동등성 테스트임을 인식해야합니다. 그래서, 표현식
if(period = "A"|| "B" || "C" || "D")
는 "A"또는 "B"또는 "C"또는 "D" 및 결과 true
있는지
if(period = ("A"|| "B" || "C" || "D"))
세트 기간과 동일한 것을 의미한다. 그러나 논리적이거나 단지 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
에 대한 호출은 재해가 발생하지 않습니다. 나는 나 자신을 보호하려고 노력한다.
대단히 감사합니다. –