faça arrayList.toArray () retornar tipos mais específicos
189
Então, normalmente ArrayList.toArray()retornaria um tipo de Object[].... mas supostamente é um
Arraylistobjeto Custom, como faço toArray()para retornar um tipo de, Custom[]e não Object[]?
Existem 2 métodos com o mesmo nome 'toArray ()' em ArrayList. A partir de 1.5, o segundo método leva a matriz digitada. Você está procurando uma solução para pré-1,5?
AFAIK: Isso tem algo a ver com Java como um todo, sendo incapaz de usar construtores genéricos. Portanto, embora saiba que você precisa dele para converter um objeto como String [] ou MyObject [], ele não pode instanciar por conta própria.
E se, em vez de String, queremos usar o dobro? Parece falhar ... Podemos usar o dobro, mas e se eu quiser o dobro?
Pixel
2
@pbs Você não pode. Os genéricos de Java suportam apenas tipos de referência, não primitivos. O encaixotamento automático / desembalagem deve permitir que você ignore a diferença entre eles na maior parte do tempo.
Solarshado
16
Realmente não precisa retornar Object[], por exemplo: -
Eu recebi a resposta ... isso parece estar funcionando perfeitamente bem
publicint[] test (int[]b ){ArrayList<Integer> l =newArrayList<Integer>();Object[] returnArrayObject = l.toArray();int returnArray[]=newint[returnArrayObject.length];for(int i =0; i < returnArrayObject.length; i++){
returnArray[i]=(Integer) returnArrayObject[i];}return returnArray;}
E se tivermos ArrayList <Animal> e ele contiver tipos de cães e gatos que estendem Animal? Parece que falharia se o primeiro elemento fosse Dog e o próximo fosse Cat. Ele vê o primeiro elemento, cria uma matriz do tipo Dog, adiciona o cachorro e tenta adicionar o gato e falha. Também pode não funcionar com E. genérico
Respostas:
Como isso:
Antes do Java6, era recomendável escrever:
porque a implementação interna realocaria uma matriz de tamanho adequado de qualquer maneira, portanto, seria melhor fazê-lo antecipadamente. Como Java6, a matriz vazia é preferida, consulte .toArray (nova MyClass [0]) ou .toArray (nova MyClass [myList.size ()])?
Se sua lista não for digitada corretamente, você precisará fazer uma conversão antes de ligar para o Arrray. Como isso:
fonte
Realmente não precisa retornar
Object[]
, por exemplo: -Aqui está a minha
Custom
turma: -fonte
http://download.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object[{%29
fonte
Eu recebi a resposta ... isso parece estar funcionando perfeitamente bem
fonte
Amostras:
fonte