Chtěl jsem napsat rozsáhlejší článeček o kolekcích, ale venku je tak krásně, že se mi do toho moc nechce. Tak napíšu něco kratšího. Začnu kvízovou otázkou: Jaká je nejjednodušší metoda pro vytvoření Listu obsahujícího tři prvky v Javě 5?
Tzn. jak jednoduše udělat něco takového:
|
V Javě 7 to bude snadné, budeme mít krásný nový literál, který nám přečte myšlenky a udělá to všechno za nás. Navíc to bude mnohem snažší než v Ruby nebo jiném v té době módním jazyce.
Ale jak to udělat v Javě 5? Tak co napadá vás něco?
Abyste měli ještě trochu času, ukaži vám špatné, ale zajímavé řešení.
|
Používám zde novou, docela zajímavou funkci z třídy java.util.Collections. Doporučuji vám si tuto třídu nastudovat, v Javě 5 v ní přibyly některé nové zajímavé funkce.
Už jste přišli na to jediné správné řešení? Je to docela snadné:
List<String> list = Arrays.asList("one","two","three");
V Javě 5 se funce Arrays.asList změnila tak, že místo pole Objectů přijímá parametr typu T …, takže nám umožňuje takovýto zápis. Nevýhodou uvedeného řešení je to, že získaný seznam je neměnitelný. Při pokusu například o přidání, dostaneme UnsupportedOperationException.
Abychom se v Javě 5 opravdu vyžili, můžeme zkusit vytvořit seznam čísel.
List<Number> list = Arrays.asList(1,2L,3d);
Toto nám překladač nepovolí. Zablábolí něco takového „Type mismatch: cannot convert from List
List<Number> list = Arrays.<Number>asList(1,2L,3d);
Otázka je, nakolik bude výsledný kód čitelný. Ale s trochou cviku to jde. Ono se nám to bude hodit na dobu, kdy nám z Javy udělají Ruby.
Dalsi moznosti je magicky zapis, ktery byl nutny v java 1.4: new LinkedList(){{add(“one”);add(“two”);add(“three”)}}, ma to jiste nevyhody, ale je to pro javu 1.4 nejratsi….
Napadá mne jedna otázka. Proč zkracovat zápis, když ten základní je nejvíce čitelný?
Tohle vytvoří list, který lze modifikovat 🙂
List list = new ArrayList(Arrays.asList(“one”,”two”,”three”));
a ještě jedna perla 🙂
List list = Collections.list(Collections.enumeration(Arrays.asList(1.0 ,2 , 3f)));
Je treba povedat, ze kod je daleko rychlejsi – ked sa pouzije Arrays.asList(”one”,”two”,”three”).
Zkrácený zápis se hodí například při inicializaci “konstanty”. Např. NUMBERS = Arrays.asList(“one”,”two”,”three”);
public static final List
nekdy ale potrebujete, aby do listu nemohl nikdo pridavat.
Ale rozhodne bych se nehonil za nejkratsim zapisem.
Kod ma zobrazovat algoritmus – citelne a prehledne