Viac na
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);
948
3
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 triedyInteger
, ktorá obaluje primitívumint
. Preveďte svoje pole naList
pomocou užitočnej metódyArrays.asList
.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ápeArrays.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.
musíte obsadiť do poľa