2010-05-20 6 views
2

Je vais avoir quelques problèmes à faire ce qui suit:Typecast un ArrayList.toArray() en Java tableau normal

int[] tmpIntList = (int[])MyArrayList.toArray(someValue); 

MyArrayList contient uniquement des chiffres. Je reçois une erreur typecast depuis ArrayList renvoie seulement Object[] mais pourquoi n'est-il pas possible de le transformer en int[]?

+0

Pourquoi en avez-vous besoin? Les collections sont mieux conservées en tant que classes de collection ... à moins qu'il y ait un besoin d'optimiser, mais alors vous devez être sûr que vous n'optimisez pas prématurément (un ArrayList est presque aussi rapide qu'un tableau) – Robert

+0

C'est correct, mais dans ce cas J'ai besoin d'un int [] pour retourner une autre fonction qui ne prend que int []. (pas construit par moi) – Marthin

Répondre

4

Un ArrayList ne peut pas contenir les valeurs int, car il est soutenu par un Object[] (même s'il est générique).

Le plus proche que vous pourriez venir serait d'avoir un Integer[] - qui ne peut pas être converti en int[]. Vous devez convertir chaque élément séparément. Je crois qu'il existe des bibliothèques qui implémentent ces conversions pour tous les types primitifs.

Fondamentalement, le problème est que les génériques Java ne prennent pas en charge les types primitifs.

+0

Merci! Très bonne réponse! – Marthin

3

ArrayUtils.toPrimitive(..) fera la conversion entre Integer[] et int[], si vous en avez vraiment besoin. (Apache commons-lang)

Alors:

int[] tmpIntList = ArrayUtils.toPrimitive(MyArrayList.toArray(someValue)); 
+1

Refusé de donner Commons Lang comme une solution, il a une méthode d'utilité pour à peu près tout ce que vous pouvez penser. – ponzao

+0

Merci pour ça! – Marthin

0

plutôt puis y compris apache-communs pour que cet appel de méthode unique, vous pouvez utiliser Integer[].

@Bozho, merci mon pote pour cette suggestion.

Questions connexes