Java의 명시적 캐스팅 및 ClassCastException 이해
Java에서는 명시적 캐스팅을 사용하여 슈퍼클래스 객체를 하위 클래스 변수에 할당할 수 있습니다. 예를 들어 다음 코드를 고려해보세요.
public class Animal { public void eat() {} } public class Dog extends Animal { public void eat() {} public static void main(String[] args) { Animal animal = new Animal(); Dog dog = (Dog) animal; } }
코드가 성공적으로 컴파일되었지만 Dog dog = (Dog) Animal; 런타임에 ClassCastException이 발생합니다.
이 오류가 발생하는 이유는 무엇입니까?
컴파일러는 명시적 캐스팅을 허용하지만 컴파일 타임에 캐스팅의 유효성을 보장할 수는 없습니다. 객체를 슈퍼클래스에서 서브클래스로 캐스트하면 본질적으로 컴파일러에게 객체가 실제로 서브클래스의 인스턴스임을 신뢰하도록 지시하는 것입니다.
이 예에서 변수 Animal은 Animal의 인스턴스입니다. 수업. 그러나 이를 Dog 개체로 캐스팅하면 동물이 Dog 개체를 참조하는 것으로 암시적으로 가정하지만 그렇지 않습니다. 따라서 JVM은 런타임에 이 가정을 검증하고 실패할 때 ClassCastException을 발생시킵니다.
이러한 오류를 어떻게 방지할 수 있습니까?
명시적 캐스팅을 안전하게 수행하려면 다음을 수행해야 합니다. 다음 확인을 수행하십시오.
요약하자면 명시적 캐스팅을 사용하면 컴파일러의 유형 검사를 무시할 수 있지만 이에 의존하기 전에 신중하게 접근하고 캐스팅의 유효성을 확인하는 것이 중요합니다. 그것.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3