Java : 캐스트 컬렉션 유형 대 하위 유형 [중복
-
22-07-2019 - |
문제
이 질문은 이미 여기에 답이 있습니다.
수업을 가정하십시오 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>
!
서브 타입은 일반적인 유형을 통해 확장되지 않습니다.
T <: U
그것을 암시하지 않습니다C<T> <: C<U>
.
성능에 최소한의 영향을 받아 일부 유형 안전을 유지하는 방법은 싸개. 이 예는 컬렉션에 관한 것이고, 목록 사례는 매우 유사하며 언젠가는 그것을 쓸 것입니다. 다른 사람이 내 앞에 오면 코드를 공유하십시오.
제휴하지 않습니다 StackOverflow