ClassScastException이 반환 값에 액세스 할 때만 발생하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1268623

  •  13-09-2019
  •  | 
  •  

문제

와 연관되다 이 질문

이 기능을 감안할 때 :

public static <S extends CharSequence> S foo(S s) {
  return (S) new StringBuilder(s);
}

이 호출이 예외없이 실행되는 이유 :

foo("hello");

그러나 이것은 ClassCastException을 던지십니까?

System.out.println(foo("hello"));
도움이 되었습니까?

해결책

Java 5/6의 제네릭은입니다 유형 기반, 이것은 모든 일반 유형이 근본적으로 단지 Object 유형 (또는 가장 일반적인 분모 유형은 무엇이든,이 경우 CharSequence) 런타임에. 적절한 캐스트는 필요한 곳마다 삽입됩니다. 따라서 메소드는 다음과 같은 것처럼 보이는 것에 유형 기반을 얻습니다.

public static CharSequence foo(CharSequence s) {
  return (CharSequence) new StringBuilder(s);
}

그리고 당신의 통화는 이것에 유형 기반을 얻습니다.

System.out.println((String)foo("hello"));

분명히 Java는 삽입하는 것을 귀찮게하지 않습니다 (String) 반환 값을 사용하지 않으면 캐스트 - 왜 귀찮게합니까?

다른 팁

일반 유형은 컴파일러에서만 사용할 수 있으며 런타임에 삭제 (기본적으로 생략)됩니다. 따라서 캐스트는 방법 내에서 무시됩니다

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top