IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 1. diel - Úvod do kolekcií a genericita v Jave

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Avatar
Robert Michalovič:2.12.2018 6:42

Nevím, nevím jestli bych prohlásil pole(arrays), že je kolekcí(viz. první odstavec). Kolekce jsou to co implementují toto rozhraní (java.util.Co­llections) a to pole nejsou. Vhodnější je prohlásit že existují statické pole ( mají pevně definovanou velikost ) a dynamická pole = kolekce ( mají proměnnou velikost => během práce s nimi, se jejich velikost flexibilně mění), A hlavně poukázal, že práce s kolekcemi je násobně pomalejší než práce s poli.

A taky zmínit to, že v anglické odborné literatuře kolekcím taky říká kontejnery ( viz. Thinking in Java od Bruce Eckela, jeden z hlavních vývojářů Javy) nebo Collection Framework( viz. Data Structures and the
Java Collections Framework od William J. Collins )

 
Odpovedať
2.12.2018 6:42
Avatar
Adam Bucher
Člen
Avatar
Adam Bucher:9.2.2019 21:18
Trida<int> instance = new Trida<>(10);

Tohle mi nefunguje. Googlil jsem... V Javě nelze jako generický typ použít primitivní typ.
V třídě s generickým typem se totiž pracuje s instancí jako s typem Object a Java za nás pak hlídá typ z deklarace a následně na něj generický typ přetypovává (z původního typu Object).

 
Odpovedať
9.2.2019 21:18
Avatar
Odpovedá na Adam Bucher
Petr Štechmüller:9.2.2019 21:29

Máš pravdu, špatně jsem to tam napsal...

Odpovedať
9.2.2019 21:29
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Avatar
Marek Bartosek:12.5.2019 12:23

Trida<Integer> instance = new Trida<>();

Nevím, jak je to zde správně, ale u mně je tohle nemožné, u mého IDE (který mě při tomhle vyhubuje), a kurzu Javy, bylo řečeno, že i druhé strana(ta pravá) musí obsahovat též ve špičatých závorkách též typ. Takže korektně viz zde:
Trida<Integer> instance = new Trida<Integer>();

Popřípadě se těším na vysvětlení. Proč první verze by měla fungovat.

 
Odpovedať
12.5.2019 12:23
Avatar
Atrament
Člen IT Redactor Gang
Avatar
Odpovedá na Marek Bartosek
Atrament:12.5.2019 12:59

Ta první verze je správná od verze 7, říká se tomu 'diamond operator', pokud tvé IDE trvá na té druhé verzi, tak zkontroluj v nastavení projektu jestli nepoužíváš verzi 6 nebo nižší, případně jestli nemáš nastavenou kompatibilitu na takto staré verze...

 
Odpovedať
12.5.2019 12:59
Avatar
Odpovedá na Atrament
Marek Bartosek:12.5.2019 20:39

Děkuji moc za vysvětlení. Problém byl v té kompatibilitě.

 
Odpovedať
12.5.2019 20:39
Avatar
ishei
Člen
Avatar
ishei:14.7.2019 13:28

Je mozne v clanku seznamit zacatecniky blize s logikou teto syntaxe:

public <T2> boolean porovnej(T2 a) {
    return promenna.equals(a);
}

Proc se objevuje 2. genericky typ <T2> pred navratovym typem funkce? Tento clanek je 1. v ramci Java serie, kde se syntaxe pouziva.

 
Odpovedať
14.7.2019 13:28
Avatar
davks11
Člen
Avatar
davks11:11.6.2020 8:08

Jen pro ty, kteří to nevědí... Pokud chceme použít generickou metodu, kterou jen tak mimochodem můžeme použít i v negenerické třídě, uvádí se deklarace typového parametru před návratový typ metody. Takže před návratovým typem metody je uvedena deklarace typového parametru:

private static <T extends Number> Double secti(T c, T d) {
        return c.doubleValue() + d.doubleValue();
    }

Výše uvedená metoda říká, že parametry této metody můžou být buďto typ Number, nebo jeho potomci, například Integer, nebo Double. Typ Number je tedy v tomto případě horní hranicí.

Jinak pěkný článek a těším se na čtení dalších dílů.

 
Odpovedať
11.6.2020 8:08
Avatar
Lubor Pešek
Člen
Avatar
Lubor Pešek:18.4.2021 5:31

Je zápis

instance.porovnej<String>("15");

Správný? Tento jsem nikdy neviděl a také mi IDE odmítá takový zápis akceptovat. (i ve vzorovém zadání to máš bez generického zápisu).

Odpovedať
18.4.2021 5:31
Existují dva způsoby, jak vyřešit problém. Za prvé vyhoďte počítač z okna. Za druhé vyhoďte okna z počítače.
Avatar
Odpovedá na Lubor Pešek
Petr Štechmüller:18.4.2021 8:58

Ahoj,

moje chyba. Správně to mělo být takto:

instance.<String>porovnej("15");

Opravu jsem už zaslal ke schválení.

Chtěl jsem tím naznačit, že i zápis uvedený zde je validní.

Editované 18.4.2021 9:00
Odpovedať
18.4.2021 8:58
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zatiaľ nikto nevložil komentár - buď prvý!