Pergunta

Esta questão já tem uma resposta aqui:

Suponha classe B estende a classe A. Eu tenho um List<A> que acontece que eu sei única contém instâncias de B. Existe uma maneira que eu possa lançar o List<A> a um List<B>?

Parece que minha única opção é para iterar sobre a coleção, lançando um elemento de tempo, criando uma nova coleção. Este parece ser um total desperdício de recursos determinado tipo de apagamento torna esta completamente desnecessário em tempo de execução.

Foi útil?

Solução

Você pode lançar através da interface List untyped:

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

Outras dicas

Você pode tentar o seguinte:

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

É com base na resposta de jarnbjo, mas não use listas de matérias.

List<A> não um subtipo de List<B>!

Os JLS mesmo menciona que explicitamente :

Subtipagem não se estende através de tipos genéricos:. T <: U não implica que C<T> <: C<U>

Uma maneira de manter algum tipo de segurança com o mínimo impacto sobre o desempenho é usar um invólucro . Este exemplo é sobre a coleção, o caso Lista seria muito semelhante e talvez um dia eu vou escrever isso também. Se alguém vem antes de mim, por favor, vamos compartilhar o código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top