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.

Jsou zobrazeny jen nové odpovědi. Zobrazit všechny
Předmět Autor Datum
LinkedList<String> list = new LinkedList<String>();
Wikan 07.04.2013 12:01
Wikan
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
Nemá zmysel programovať voči interfejsom pri premennej, ktorú máš v lokálnom scope. Tak isto nemá in… nový
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... nový
MaSo 07.04.2013 19:59
MaSo
Pri lokálnych premenných to best practice nie je. nový
los 07.04.2013 20:00
los
Proč? Raději ať je to takto všude, než nikde... nový
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

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

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