2008-11-13 3 views
3
private void activateRecords(long[] stuff) { 
    ... 
    api.activateRecords(Arrays.asList(specIdsToActivate)); 
    } 

Cet appel à Arrays.asList ne doit-il pas renvoyer une liste de Long s? Au contraire, il renvoie une List<long[]>Ai-je raté quelque chose, ou est-ce que varargs casse Arrays.asList?

public static <T> List<T> asList(T... a) 

La signature de la méthode est compatible avec les résultats, les varargs jette tout le tableau dans la liste. Il est le même que new ArrayList(); list.add(myArray) Et oui, je sais qu'il est destiné à être utilisé comme ceci: Arrays.asList(T t1, T t2, T t3)

Je suppose que ce que je veux en venir, est au lieu de la forme varargs, pourquoi je ne peux pas avoir juste mon ancienne méthode asList (du moins je pense que c'est comme ça que ça fonctionnait) qui prendrait le contenu et les mettrait individuellement dans une liste? Tout autre propre façon de faire?

Répondre

7

C'est parce que long [] et Long [] sont de types différents.

Dans le premier cas T est long [], dans le second T est Long.

Comment résoudre ce problème? Ne pas utiliser longtemps [] en premier lieu?

+1

Merci! Je l'ai maintenant mais travailler avec les applications héritées du vendeur ne me donne pas l'option de "[ne pas] utiliser long [] en premier lieu" – oreoshake

+0

Puis convertir long [] en Long []. Je sais, c'est idiot. – Pyrolistical

+0

"Impossible de diffuser depuis long [] vers Long []" – oreoshake

5

L'Autoboxing ne peut pas être effectué sur des tableaux. Vous êtes autorisé à faire:

private List<Long> array(final long[] lngs) { 
    List<Long> list = new ArrayList<Long>(); 
    for (long l : lngs) { 
     list.add(l); 
    } 
    return list; 
} 

ou

private List<Long> array(final long[] lngs) { 
    List<Long> list = new ArrayList<Long>(); 
    for (Long l : lngs) { 
     list.add(l); 
    } 
    return list; 
} 

(notez que les types itératifs sont différents)

par exemple

Long l = 1l; 

mais pas

Long[] ls = new long[]{1l} 
+0

merci, c'est exactement ce que j'ai fini par faire – oreoshake

Questions connexes