codigo - propiedades slider java
Java: tipo de colección de conversión para subtipo (4)
Esta pregunta ya tiene una respuesta aquí:
Supongamos que la clase B
extiende la clase A
Tengo una List<A>
que, por casualidad, solo sé que contiene ejemplares de B
¿Hay alguna manera de convertir la List<A>
en una List<B>
?
Parece que mi única opción es iterar sobre la colección, lanzando un elemento a la vez, creando una nueva colección. Esto parece una pérdida total de recursos porque el borrado de tipos hace que esto sea completamente innecesario en tiempo de ejecución.
Puede transmitir a través de la interfaz de la lista sin tipo:
List<A> a = new ArrayList<A>();
List<B> b = (List)a;
Puedes intentar esto:
List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;
Se basa en la respuesta de jarnbjo, pero no utiliza listas crudas.
Una forma de retener algún tipo de seguridad con un impacto mínimo en el rendimiento es usar un wrapper . Este ejemplo es sobre Colección, el caso de la Lista sería muy similar y tal vez un día también lo escriba. Si alguien más viene antes que nosotros, por favor compartamos el código.
List<A>
no es un subtipo de la List<B>
!
El JLS incluso menciona eso explícitamente :
La subtipificación no se extiende a través de tipos genéricos:
T <: U
no implica queC<T> <: C<U>
.