NOVINKA: Začni v IT jako webmaster s komplexním akreditovaným online kurzem Tvůrce WWW stránek. Zjisti více:
NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

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

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
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
Radek Veverka
Tvůrce
Avatar
Radek Veverka:24.7.2015 8:53

Ahoj, jak je to s konstruktorem při instanciování generického typu T? Vůbec se nezavolá? Anebo lze nějak specifikovat, abych mohl použít jen množinu datových typů, které mají v konstruktoru stejné dané parametry?

Avatar
Miroslav Mazal:6.9.2018 18:40

Ahoj. Chápu to správně, že když chci v Main odkazovat na proměnné z nějaké třídy, nemohu to udělat přímo, ale musím nejdříve v Main vytvořit Instanci dané třídy?

Avatar
Jirka
Člen
Avatar
Odpovídá na Miroslav Mazal
Jirka:6.9.2018 19:08

Ahoj.

V "Main" můžeš přímo jen statické-metody třídy. Obvykle ale chceš používat instanci, kterou si vytvoříš třeba takto:

public class Main {
public static main(...) {
ArrayList<String> alist = new ArrayList<>();
alist.add("string0"); //do alist pridas string0
alist.add("string1"); //do alist pridas string1
alist.add("string2"); //do alist pridas string2
for(int index = 0; index < alist.count(); index ++) {
        System.out.println(alist.get(index));
}
}
}
Odpovědět
Kdo nic nedělá, nic nezkazí.
Avatar
Miroslav Mazal:6.9.2018 19:26

Ahoj. Snažím se pochopit funkčnost tohoto kódu.

    public class ListA <T>
    {
            private T[] arr;
            private int count;

            public int Count
            {
                get
                {
                    return this.count;
                }
            }
            private const int INITIAL_CAPACITY = 4;
            public ListA(int capacity = INITIAL_CAPACITY)
            {
                this.arr = new T[capacity];
                this.count = 6;
            }

    }
}

Chápu to tak, že je to třída (List) zatím s nespecifikovaným typem dat. Tato třída obsahuje pole dat s názvem arr a intovou proměnnou count. Pak je zde vlastnost, abychom se mohli odjinud zeptat, jaký je momentálně count, neboli aktuální počet polí. Je to tak? Pak se už trochu ztrácím...

Avatar
Miroslav Mazal:6.9.2018 19:27

this.count má být 0. Přepsal jsem to, když jsem zkoušel, co se stane....

Avatar
Odpovídá na Miroslav Mazal
Neaktivní uživatel:6.9.2018 20:09

<code>count</code> není počet polí, ale počet prvků v listu, tedy kolik těch prvků má pole navenek. <code>INITIAL_CA­PACITY</code> je konstanta určující, kolik prvků má mít pole ihned po vytvoření listu. A konstruktor snad chápeš, ne (to <code>int capacity = INITIAL_CAPACI­TY</code> znamená, že to tam nemusíš nutně psát a v takovém případě se přiřadí <code>INITIAL_CA­PACITY</code>)?

@Jirka tady jsme v C#, pokud čtu dobře ;-)

Odpovědět
Neaktivní uživatelský účet
Avatar
Odpovídá na Neaktivní uživatel
Miroslav Mazal:6.9.2018 20:41

Díky. Mátlo mě to INITIAL... Máš pravdu, pak jsem si to tu našel, že count je počet vložených prvků. Mám sice hlavu plnou informací, ale přechod do skutečného psaní je těžký :-P Často se vracím do prostudovaných kapitol, a často mi až pak různé věci docvaknou. Vrtá mi ještě hlavou, co by se stalo, kdyby tam nebyly ty this? Kde by se to pak projevilo. Protože program funguje i bez toho. (Omlouvám se, že v této fázi mám asi pro programátory hloupé otázky.)

Avatar
Odpovídá na Miroslav Mazal
Neaktivní uživatel:6.9.2018 20:48

<code>this</code> prostě zabraňuje kolizi názvů, zatím by se nic nestalo. Ale kdybys měl v tom svém listu metodu obsahující

int count;

bez použití <code>this</code> by ses odkazoval na <code>count</code> své metody, ne celé třídy. A s tím vracením se – já to taky občas dělám a např. delegáty a anonymní metody nechápu (kdybych je musel používat, asi je časem pochopím), ale až na takové úrovni? No, dokud tě odsud někdo nevykáže za spam, asi se klidně ptej…

Odpovědět
Neaktivní uživatelský účet
Avatar
Martin Patočka:8.8.2019 20:08

Ahoj, prosím vás od radu. Právě dělám takovou "hru" v konzoli a nevím jak udělat pole objektů, respektive potřebuji volat 50 instancí třídy, kde každá má jiný jméno a jinou staminu, potřebuji vzít tu první a ta až umře tak vytáhnout druhou atd... Pěkně popořadě, poradí mi někdo?

Avatar
David
Člen
Avatar
David:8.5.2020 23:00

Díky za článek. ;-)

Nejnovější komentáře jsou na konci poslední stránky.
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 26.