문제

이 질문은 이미 여기에 답이 있습니다.

수업을 가정하십시오 B 수업을 연장합니다 A. 나는있다 List<A> 내가 아는 것 인스턴스를 포함합니다 B. 내가 캐스팅 할 수있는 방법이 있습니까? List<A> a List<B>?

내 유일한 옵션은 컬렉션을 반복하여 한 번에 하나의 요소를 캐스팅하여 새 컬렉션을 만드는 것 같습니다. 이것은 유형의 삭제가 주어진 자원 낭비처럼 보이면 런타임에 완전히 불필요하게 만듭니다.

도움이 되었습니까?

해결책

Untyped List 인터페이스를 통해 캐스트 할 수 있습니다.

List<A> a = new ArrayList<A>();
List<B> b = (List)a;

다른 팁

당신은 이것을 시도 할 수 있습니다 :

List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;

Jarnbjo의 답변을 기반으로하지만 원시 목록을 사용하지 마십시오.

List<A> ~이다 ~ 아니다 하위 유형 List<B>!

JLS는 심지어 명시 적으로 언급합니다:

서브 타입은 일반적인 유형을 통해 확장되지 않습니다. T <: U 그것을 암시하지 않습니다 C<T> <: C<U>.

성능에 최소한의 영향을 받아 일부 유형 안전을 유지하는 방법은 싸개. 이 예는 컬렉션에 관한 것이고, 목록 사례는 매우 유사하며 언젠가는 그것을 쓸 것입니다. 다른 사람이 내 앞에 오면 코드를 공유하십시오.

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