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

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

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

 
Odpovedať
6.9.2018 18:40
Avatar
Jirka
Člen
Avatar
Odpovedá 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));
}
}
}
Odpovedať
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...

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

 
Odpovedať
6.9.2018 19:27
Avatar
Odpovedá 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 ;-)

Odpovedať
6.9.2018 20:09
Neaktivní uživatelský účet
Avatar
Odpovedá 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.)

 
Odpovedať
6.9.2018 20:41
Avatar
Odpovedá 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…

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

 
Odpovedať
8.8.2019 20:08
Avatar
David
Člen
Avatar
David:8.5.2020 23:00

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

 
Odpovedať
8.5.2020 23:00
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ý!