Konverzia poľa na zoznam v jazyku Java

Ako v Jave prevediem pole na zoznam?

Použil som Arrays.asList(), ale správanie (a signatúra) sa nejako zmenilo z Javy SE 1.4.2 (dokumenty sú teraz v archíve) na 8 a väčšina úryvkov, ktoré som našiel na webe, používa správanie z 1.4.2.

Napríklad:

int[] spam = new int[] { 1, 2, 3 };
Arrays.asList(spam)
  • na 1.4.2 vráti zoznam obsahujúci prvky 1, 2, 3
  • vo verzii 1.5.0+ vráti zoznam obsahujúci pole spam

V mnohých prípadoch by sa to malo dať ľahko odhaliť, ale niekedy to môže uniknúť bez povšimnutia:

Assert.assertTrue(Arrays.asList(spam).indexOf(4) == -1);
Riešenie

Vo vašom príklade je to preto, lebo nemôžete mať primitívny typ List. Inými slovami, List nie je možné.

Môžete však mať List pomocou triedy Integer, ktorá obaluje primitívum int. Preveďte svoje pole na List pomocou užitočnej metódy Arrays.asList.

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

Pozrite si tento kód spustený na IdeOne.com.

Komentáre (16)

Problém je v tom, že v Jave5 sa zaviedli varargy a nanešťastie sa aj Arrays.asList() preťažil verziou s varargom. Takže kompilátor Java5 chápe Arrays.asList(spam) ako parameter vararg pre polia typu int.

Tento problém je podrobnejšie vysvetlený v knihe Effective Java 2nd Ed., kapitola 7, bod 42.

Komentáre (2)

musíte obsadiť do poľa

Arrays.asList((Object[]) array)
Komentáre (2)