Massiivide konverteerimine loeteluks Java's

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)
  • 1.4.2 puhul tagastab nimekirja, mis sisaldab elemente 1, 2, 3.
  • versioonil 1.5.0+ tagastab nimekirja, mis sisaldab massiivi 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);
Lahendus

Teie näites on see sellepärast, et teil ei saa olla primitiivse tüübi List. Teisisõnu, List ei ole võimalik.

Küll aga saab olla List, kasutades klassi Integer, mis ümbritseb primitiivi int. Konverteerige oma massiivi List abil Arrays.asList).

Integer[] spam = new Integer[] { 1, 2, 3 };
List list = Arrays.asList(spam);

Vaata seda kood töötab otse IdeOne.com.

Kommentaarid (16)

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.

Kommentaarid (2)

peate valama massiivi

Arrays.asList((Object[]) array)
Kommentaarid (2)