NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 1 - Úvod do kolekcí a genericita v Javě

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
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 )

 
Odpovědět
+3
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).

 
Odpovědět
+1
9.2.2019 21:18
Avatar
Odpovídá na Adam Bucher
Petr Štechmüller:9.2.2019 21:29

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

Odpovědět
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.

 
Odpovědět
12.5.2019 12:23
Avatar
Atrament
Člen
Avatar
Odpovídá 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...

 
Odpovědět
+3
12.5.2019 12:59
Avatar
Odpovídá na Atrament
Marek Bartosek:12.5.2019 20:39

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

 
Odpovědět
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.

 
Odpovědět
+9
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ů.

 
Odpovědět
+3
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).

Odpovědět
+1
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
Odpovídá 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í.

Editováno 18.4.2021 9:00
Odpovědět
+1
18.4.2021 8:58
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 43.