Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno 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.

Předmět Autor Datum
LinkedList<String> list = new LinkedList<String>();
Wikan 07.04.2013 12:01
Wikan
Dekuji.
Luk 07.04.2013 12:59
Luk
Takto se to ale nedělá, programuje se proti interface (List) ne proti implementaci (LinkedList). Sta…
MaSo 07.04.2013 14:51
MaSo
LinkedList ale těch interfaců implementuje několik. Co když zrovna bude potřebovat metodu, která v L…
Wikan 07.04.2013 14:56
Wikan
To záleží na kontrétním případě užití. LinkedList je především List, takže implementuje interface Li…
MaSo 07.04.2013 16:15
MaSo
Jenže zapouzdření se týká hlavně public členů a tohle je private.
Wikan 07.04.2013 16:41
Wikan
Přečet jsem si tvou odpověď asi 4x, ale nechápu ji. :-) Nevidim nikde nic private, ten List má přece…
MaSo 07.04.2013 19:30
MaSo
No vidíš, přehlédl jsem, že je to uvnitř metody. O důvod víc, proč kašlat na nějaké programování pro…
Wikan 07.04.2013 19:45
Wikan
Nemá zmysel programovať voči interfejsom pri premennej, ktorú máš v lokálnom scope. Tak isto nemá in…
los 07.04.2013 19:51
los
V Javě je to ale best practice, takže je dobré to tak začátečníky učit...
MaSo 07.04.2013 19:59
MaSo
Pri lokálnych premenných to best practice nie je.
los 07.04.2013 20:00
los
Proč? Raději ať je to takto všude, než nikde...
MaSo 07.04.2013 20:01
MaSo
Lebo to nemá žiaden zmysel. Edit: Tým netvrdím, že by som to nenapísal tak, ako odporúčaš - práve na… poslední
los 07.04.2013 20:05
los
Odpoveď si už dostal, takže len pre doplnenie: Ak používaš Eclipse, tak pre automatické doplnenie im…
los 07.04.2013 12:19
los

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

List<Cokoli> list = new LinkedList<>();

máme možnost kdykoli vyměnit tento LinkedList, třeba za thread-safe implementaci CopyOnWriteArrayList a to bez ovlivnění funkce programu.

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++.

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.

Zpět do poradny Odpovědět na původní otázku Nahoru