Kuidas konverteerida massiivi loeteluks Java's?
Ma kasutasin Arrays.asList()
, kuid käitumine (ja allkiri) kuidagi muutunud Java SE 1.4.2 (dokumendid nüüd arhiivis) 8 ja enamik katkendeid ma leidsin veebis kasutada 1.4.2 käitumist.
Näiteks:
int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
Paljudel juhtudel peaks seda olema lihtne avastada, kuid mõnikord võib see märkamatult välja lipsata:
Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Teie näites on see sellepärast, et teil ei saa olla primitiivse tüübi List. Teisisõnu, List<int>
ei ole võimalik.
Küll aga saab olla List<Integer>
, kasutades klassi Integer
, mis ümbritseb primitiivi int
. Konverteerige oma massiivi List
abil Arrays.asList
).
Integer[] spam = new Integer[] { 1, 2, 3 };
List<Integer> list = Arrays.asList(spam);
Vaata seda kood töötab otse IdeOne.com.
Probleem on selles, et varargs võeti kasutusele Java5-s ja kahjuks sai Arrays.asList()
ka vararg-versiooniga ülekoormatud. Seega mõistab Java5 kompilaator Arrays.asList(spam)
int massiivi vararg parameetrina.
Seda probleemi on täpsemalt selgitatud Effective Java 2. väljaande 7. peatüki punktis 42.