NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!

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
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?

 
Odpovědět
24.7.2015 8:53
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?

 
Odpovědět
6.9.2018 18:40
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
6.9.2018 19:08
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...

 
Odpovědět
6.9.2018 19:26
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....

 
Odpovědět
6.9.2018 19:27
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
6.9.2018 20:09
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.)

 
Odpovědět
6.9.2018 20:41
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
6.9.2018 20:48
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?

 
Odpovědět
8.8.2019 20:08
Avatar
David
Člen
Avatar
David:8.5.2020 23:00

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

 
Odpovědět
8.5.2020 23:00
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.