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)
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);
Vo vašom príklade je to preto, lebo nemôžete mať primitívny typ List. Inými slovami, List<int>
nie je možné.
Môžete však mať List<Integer>
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<Integer> list = Arrays.asList(spam);
Pozrite si tento kód spustený na IdeOne.com.
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.