make arrayList.toArray () retourne des types plus spécifiques
189
Donc, normalement ArrayList.toArray()retournerait un type de Object[].... mais supposé que c'est un
Arraylistobjet Custom, comment faire toArray()pour retourner un type de Custom[]plutôt que Object[]?
Il existe 2 méthodes avec le même nom «toArray ()» dans ArrayList. À partir de 1.5, la deuxième méthode utilise un tableau typé. Cherchez-vous une solution pour la pré-1.5?
AFAIK: Cela a quelque chose à voir avec Java dans son ensemble, étant incapable d'utiliser des constructeurs génériques. Ainsi, bien qu'il sache que vous en avez besoin pour vous convertir un objet comme String [] ou MyObject [], il ne peut pas l'instancier seul.
Et si au lieu de String nous voulions utiliser double? Cela semble échouer ... On peut utiliser Double, mais que faire si je veux double?
Pixel
2
@pbs Vous ne pouvez pas. Les génériques de Java ne prennent en charge que les types de référence, pas les primitives. Cependant, l'auto-boxing / unboxing devrait vous permettre d'ignorer la différence entre eux pour la plupart.
solarshado le
16
Il n'a pas vraiment besoin de revenir Object[], par exemple: -
J'ai la réponse ... cela semble fonctionner parfaitement bien
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;}
Et si nous avons ArrayList <Animal> et qu'il contient des types Dog et Cat qui étendent Animal? On dirait que cela échouerait si le premier élément est Dog et le suivant est Cat. Il voit le premier élément, crée un tableau de type Chien, ajoute le chien puis essaie d'ajouter le chat et échoue. Peut également ne pas fonctionner avec E. générique
Réponses:
Comme ça:
Avant Java6, il était recommandé d'écrire:
parce que l'implémentation interne réallouerait de toute façon un tableau correctement dimensionné, donc vous feriez mieux de le faire à l'avance. Depuis Java6, le tableau vide est préféré, voir .toArray (new MyClass [0]) ou .toArray (new MyClass [myList.size ()])?
Si votre liste n'est pas correctement saisie, vous devez effectuer un cast avant d'appeler toArray. Comme ça:
la source
Il n'a pas vraiment besoin de revenir
Object[]
, par exemple: -Voici ma
Custom
classe: -la source
http://download.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray%28java.lang.Object[[[
la source
J'ai la réponse ... cela semble fonctionner parfaitement bien
la source
Échantillons:
la source