[Java] java.lang.ClassCastException

Damsul·2023년 3월 10일
0

Error, exception

목록 보기
1/3
post-thumbnail

정의

하위 클래스가 아닌 클래스로 캐스팅을 시도했다고 알리는 예외.


예제

제네릭의 와일드 카드를 사용하여 sum 메소드를 구현

  • condition:
    • sum 메소드에서 숫자 관련된 데이터 타입을 다 받을 수 있어야 한다.
    • 반환 타입은 double
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 클래스에서 추상화한 메서드

  • doubleValue()
  • floatValue()
  • intValue()
  • longValue()

등 각 Wrapper 클래스에서 구현이 되어 있습니다.
그 중 num.doubleValue()를 사용해 언박싱하여 변환할 수 있습니다.

profile
내 맘대로 작성하는 개발일지/ 작고 소중한 개발창고

0개의 댓글