Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

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
Posledné komentáre sú na spodnej časti poslednej stránky.
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 )

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

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

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

Odpovedať
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.

Avatar
Atrament
Člen
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...

Avatar
Odpovedá na Atrament
Marek Bartosek:12.5.2019 20:39

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

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.

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

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ť
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é
Odpovedať
Pokud spolu kód a komentář nekorespondují, budou patrně oba chybné
Posledné komentáre sú na spodnej časti poslednej stránky.
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.

Zobrazené 10 správy z 45.