

Java seznam, LinkedList
Dobrý den,
které všechny knihovny musím naimportovat, abych spustil tento jednoduchoučký příklad?
import java.util.AbstractSequentialList;
import java.util.LinkedList;
public class seznam {
public static void main(String[] args) {
List<String> list = new LinkedList<String>();
list.add("jedna");
list.add("dva");
list.add("tri");
System.out.println(list.get(0)); //jedna
System.out.println(list.get(1)); //dva
System.out.println(list.get(2)); //tri
}
}
Podle dokumentace, by měly stačit ty knihovny, ktere tam mám.
Ale při překladu, mi to hlasi: cannot find symbol a ukazuje na List
Děkuji.
Dekuji.
Takto se to ale nedělá, programuje se proti interface (List) ne proti implementaci (LinkedList). Stačí tedy dodat
LinkedList ale těch interfaců implementuje několik. Co když zrovna bude potřebovat metodu, která v List<E> není?
To záleží na kontrétním případě užití. LinkedList je především List, takže implementuje interface List, který dědí z Collection a Iterable. Navíc implementuje i Deque, který dědí z Queue, takže se dá použit i jako fronta.
Obecný princip zapouzdření, ale říká, že programujemě proti interface. Takže když deklarujeme list jako
máme možnost kdykoli vyměnit tento LinkedList, třeba za thread-safe implementaci CopyOnWriteArrayList a to bez ovlivnění funkce programu.
Jenže zapouzdření se týká hlavně public členů a tohle je private.
Přečet jsem si tvou odpověď asi 4x, ale nechápu ji.
Nevidim nikde nic private, ten List má přece jen lokální scope. Ale to nemá s programováním proti inteface nic společného...
No vidíš, přehlédl jsem, že je to uvnitř metody. O důvod víc, proč kašlat na nějaké programování proti interface, protože v tomhle případě to nic nepřináší.
Nemá zmysel programovať voči interfejsom pri premennej, ktorú máš v lokálnom scope. Tak isto nemá iný než estetický zmysel programovať voči interfejsom pri práci s privátnymi premennými (private member variables). V jazykoch, ktoré idú s dobou, je možné lokálne premenné dokonca deklarovať oveľa jednoduchšie, viď var v C# alebo auto v C++.
V Javě je to ale best practice, takže je dobré to tak začátečníky učit...
Pri lokálnych premenných to best practice nie je.
Proč? Raději ať je to takto všude, než nikde...
Lebo to nemá žiaden zmysel.
Edit: Tým netvrdím, že by som to nenapísal tak, ako odporúčaš - práve naopak, osobne by som v tomto prípade uprednostnil tvoj zápis.
Odpoveď si už dostal, takže len pre doplnenie: Ak používaš Eclipse, tak pre automatické doplnenie importovaných tried stačí stlačiť Ctrl+Shift+O (Organize Imports), pokiaľ si dobre pamätám. Ak používaš niečo iné, tak je takmer isté, že podobná vec je aj tam.