instanceof-호환되지 않는 조건부 피연산자 유형
다음은 잘 컴파일됩니다.
Object o = new Object();
System.out.println(o instanceof Cloneable);
그러나 이것은 그렇지 않습니다.
String s = new String();
System.out.println(s instanceof Cloneable);
컴파일러 오류가 발생합니다.
무엇이 문제입니까?
문제의 더 노골적인 화신은 다음과 같습니다.
if ("foo" instanceof Number)
// "Incompatible conditional operand types String and Number"
이것은 JLS 15.20.2 유형 비교 연산자에instanceof
지정되어 있습니다 .
RelationalExpression: RelationalExpression instanceof ReferenceType
의 캐스팅 경우 RelationalExpression 받는 사람 의 ReferenceType가 컴파일 타임 오류로 거부 될 것입니다, 다음
instanceof
관계식 마찬가지로 컴파일 타임 오류가 발생합니다. 그러한 상황에서instanceof
표현 의 결과는 결코 사실 일 수 없습니다.
즉,이 캐스트 표현식은 컴파일 시간 오류를 생성하기 때문입니다.
(Number) "foo"
그래서이 표현은 :
("foo" instanceof Number)
귀하의 경우는 조금 더 미묘하지만 원칙은 동일합니다.
String
마지막 수업입니다String
구현하지 않습니다Cloneable
- 그러므로 당신은 할 수 없습니다
(Cloneable) aString
- 따라서 당신은 또한 할 수 없습니다
aString instanceof Cloneable
내가 최근에 접한 관련 문제 (그리고 무슨 일이 벌어지고 있는지 알아 내기 전에이 페이지로 이끈)는 Eclipse 환경이 'instanceof'표현식에서 "호환되지 않는 조건부 피연산자 유형"을 잘못보고 할 수 있다는 것입니다. 'instanceof'의 오른쪽에 유형에 대한 'import'문이 없습니다. 가져 오기 누락으로 인해 전체 문제가 발생한다는 것을 파악하기 전에 문제의 유형이 어떻게 호환되지 않을 수 있는지 알아 내려고 잠시 시간을 보냈습니다. 이 정보가 누군가의 시간을 절약하기를 바랍니다.
컴파일러 String
는 이것이 최종 클래스 임을 알고 Cloneable
. 그래서 문자열의 어떤 인스턴스 수 이제까지 의 인스턴스 수 없습니다 Cloneable
. 실제로 항상 "false"를 인쇄 할 때 의미있는 테스트를 받았다고 생각하지 못하게합니다.
참조 URL : https://stackoverflow.com/questions/2551337/instanceof-incompatible-conditional-operand-types
'programing' 카테고리의 다른 글
자체 버그 추적 시스템을 구축하지 않는 이유 (0) | 2021.01.16 |
---|---|
div 요소를 편집 가능하게 만들려면 어떻게해야합니까 (클릭 할 때 텍스트 영역처럼)? (0) | 2021.01.16 |
Android : MediaPlayer setVolume 함수 (0) | 2021.01.16 |
자바 InputStream 모의 (0) | 2021.01.16 |
삼항 연산자에 사용하는 코딩 스타일은 무엇입니까? (0) | 2021.01.16 |