2009-08-14 3 views

답변

12

우선, 코드는 경고가없는 경고없이 컴파일해야합니다. 그것은 좋은 지표입니다. 이유를 이해하려면 sample chapter for generics from Effective Java을 살펴 보시기 바랍니다. , 당신은 몇 가지 방법에있어 또는 다른 클래스 로더 덤비는 경우, 당신은 ClassCastExceptions 이상한 얻을 수 있습니다, 모든

public void methodOne(Integer argument) { 
    methodTwo(argument); 
} 

public void methodTwo(Object argument) { 
    System.out.println(((Date) argument).getTime()); 
} 

셋째 : 모든

둘째, 제네릭과 같은 코드에서 당신을 보호 할 수 this discussion thread과 같이 그것은보고 마음이-마비입니다

java.lang.ClassCastException가 : javax.mail.Session이 javax.mail.Session 캐스트 할 수없는

그래서 대답은 아니, 당신이 할 수있다 ' 제네릭을 올바르게 사용하여 ClassCastException을 제거하십시오.

+0

+1 ClassLoader gotchas의 경우 – mtpettyp

2

아니요. Java 5.0 및 제네릭 유형을 사용한다고해서 ClassCastException이 발생하지 않습니다.

+0

거기에 어떤 방법이든 ... –

+1

전혀 캐스팅하지 않으면 ClassCastException이 표시되지 않아야합니다. –

16

Java 5 제네릭이 제공하는 "캐스트 아이언"보장은 컴파일러가 삽입 한 캐스트에서 ClassCastException을 볼 수 없다는 의미입니다. 제공된 컴파일은 "확인되지 않은"경고를 생성하지 않습니다.

코드에서 기존 (비공식) 라이브러리를 사용하는 경우 검사하지 않은 경고를 피할 수없는 경우가 많습니다. 그런 다음 컴파일러에서 생성 된 캐스트는이 ClassCastException을 던질 수 있으므로 라이브러리 코드에서 반환 한 값이 선언에 맞게 형식화되어 있는지 확인하여이를 방지해야합니다.

그렇지 않으면 상황이 변경되지 않습니다. 제네릭 외부에서 호환되지 않는 유형으로 변환하면 항상했던 것처럼 ClassCastException이 발생합니다.

(이것과 다른 제네릭 질문에 대한 좋은 참고가 Java Generics and Collections입니다.)

-1

아니. generics는 런타임 예외가 아닌 컴파일 시간 오류로부터 만 저장할 수 있습니다.

+0

-1 : 컴파일 타임 예외 란 무엇입니까? –