나는 그냥 OCA-도서 (오라클 공인 부교수)에서 읽은 그 :java.lang.ClassCastException가 또는 컴파일 시간
"일부 예외는 컴파일시 오류로 검출 할 수 캐스트, 그러나 다른 것들은 런타임시에만 탐지 될 수 있습니다. "
이제는 컴파일 타임과 런타임 모두에 대한 예제를 찾으려고합니다. 이
Object o = new C();
B b = (B) o;
가 올 캐스트 다음
class A {}
class B extends A {}
class C extends B {}
:
는 다음과 같은 클래스 구조를 생각해 보자. 따라서 코드는ClassCastException
없이 실행됩니다.
캐스트
Object o = new B();
C c = (C) o;
은 잘못된 것입니다. Object o
은 적어도 B
유형입니다. 따라서 B
또는 A
으로 전송할 수 있습니다.
그러나 이것이 런타임이나 컴파일 타임에 감지 될 수 있습니까? 나는 컴파일 타임에 추측하겠습니까?! 또는 컴파일러는 참조 (메모리) 자체가 아닌 참조의 형식 만 알고 있습니까? 이것이 사실이라면 컴파일러는 캐스트가 올바른지 컴파일 타임에 결정할 수 없습니다.
도움 주셔서 감사합니다.
:
하지만 이것은 컴파일시 실패? – SMA
당신은 그것을 시험해 볼 수 있습니다 - 작은 프로그램을 작성하고, 컴파일을 시도하고, 컴파일러가 오류를 일으키는 지 확인하십시오; 컴파일하면'ClassCastException'가 있는지 확인하고 실행 해보십시오. – Jesper