
하위 클래스가 아닌 클래스로 캐스팅을 시도했다고 알리는 예외.
제네릭의 와일드 카드를 사용하여 sum 메소드를 구현
public double sum(List<? extends Number> list){
double sum = 0;
for (Number num : list) {
sum += (double) num; // 예외 발생
}
return sum;
}
Number 클래스는 추상 클래스로, 숫자에 대한 기본 타입을 객체(클래스)로 표현하는 Wrapper 클래스들의 슈퍼 클래스를 뜻합니다.
기본적으로 기본 타입과 Wrapper 클래스 간에 데이터를 주고받을 때는 캐스팅 연산자() 를 사용할 수 없습니다. 기본 타입과 Wrapper 클래스 간에는 호환성이 없기 때문입니다.
위 메소드에서 숫자 객체인 num에 캐스팅 연산자를 사용해서 ClassCastException이 일어났습니다.
public double sum(List<? extends Number> list){
double sum = 0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
Number 클래스에서 추상화한 메서드
등 각 Wrapper 클래스에서 구현이 되어 있습니다.
그 중 num.doubleValue()를 사용해 언박싱하여 변환할 수 있습니다.