Avatar
Benjibs
Člen
Avatar
Benjibs:

Je možné mať nejaký kód okrem deklarovania premenných v triede, mimo akejkoľvek metódy?
(napr. cyklus for).

Pretože chcel som vytvorit statickú HashMap, a kŕmit ju dvojicami stringov,
avšak neviem prečo ten cyklus Java nechce vziat.

Odpovědět 5.7.2013 10:45
1 + 1 = 2
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Benjibs
David Čápka:

Samozřejmě, že ne. Bylo by to proti principu OOP.

Nahoru Odpovědět  ±0 5.7.2013 10:49
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Homo
Člen
Avatar
Odpovídá na Benjibs
Homo:

Ano lze to.

public class Foo{
   static{
      //kod co chces vykonat, vykona se pouze jednou
   }

   {
      //kod se vykona pred vytvoreni kazdou novou instanci
   }

   public Foo(){
      ...
   }
}
Editováno 5.7.2013 11:01
Nahoru Odpovědět  +1 5.7.2013 11:01
1010011 1000101 1011000
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Homo
David Čápka:

Od toho jsou konstruktory, ať instanční nebo statický.

Nahoru Odpovědět 5.7.2013 11:02
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Homo
Člen
Avatar
Odpovídá na David Čápka
Homo:

Ptal se jestli lze mit kod mimo metody, ne jestli je to spravne nebo ne. :-)

Nahoru Odpovědět 5.7.2013 11:04
1010011 1000101 1011000
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Homo
David Čápka:

Podle dotazu moc nerozumí jak OOP funguje, takže tímhle bych ho opravdu nepletl. Vždycky žasnu co do těch jazyků dávají, co to je za lidi? :D

Nahoru Odpovědět 5.7.2013 11:07
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

Konstruktory jsou potřebné pouze pokud potřebuješ do objektu předat inicializační parametry. Jinak je konstruktor zbytečný, kompozice objektu bez konstruktoru vypadá mnohem elegantněji.

Nahoru Odpovědět 5.7.2013 11:37
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Homo
Kit:

Ten kód "před vytvořením instance" ani do složených závorek nedávám. Výsledek je však trochu odlišný: deklarované proměnné zůstávají součástí objektu. Když je dám do složených závorek, budou zlikvidovány.

Nahoru Odpovědět 5.7.2013 11:41
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Proč tam vlastně chceš dávat cyklus, když to jde i bez něho? Nějaká ukázka toho, co se ti nedaří, by nebyla?

Nahoru Odpovědět 5.7.2013 11:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Hartrik
Redaktor
Avatar
Odpovídá na David Čápka
Hartrik:

Java není čistě objektový jazyk, a blok static se používá určitě častěji než myslíš

 
Nahoru Odpovědět 5.7.2013 11:50
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Možná hledáš něco takového:

Map<String,String> test = new HashMap<String, String>(){{
    put(key1, value1);
    put(key2, value2);
}};
Nahoru Odpovědět 5.7.2013 11:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Odpovídá na Kit
Benjibs:

Ide mi o to nejak spolu pospájať otázky správne odpovede na ne.
Najprv som chcel použiť Map, (vytvoril som si String[][] pole, obsahujúce otázku aj odpoved), a potom prejst to pole cyklom, ktorý 'naputuje' jednotlivé položky do Mapu.

Ale potom som zistil, že to pole mi vlastne bohate postačí, keď budem potrebovat otázku, vygenerujem z pola dvojícu, a potom porovnám if (userAnswer.e­quals(otazky[ge­nerovaneCislo][1]))

Nahoru Odpovědět 5.7.2013 12:26
1 + 1 = 2
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

A ten poslední kód se ti nelíbí? Pokud to chceš tahat ze souboru nebo dvourozměrného pole, tak místo těch dvou putů uděláš cyklus, který projde všechny záznamy a putne je do mapy. Je to hezky zapouzdřené, je to tedy ve stylu OOP.

Nahoru Odpovědět 5.7.2013 12:34
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Použití toho pole bych se raději vyhnul. Přece jen je poněkud nepraktické dávat texty dovnitř aplikace. Raději bych je viděl v XML, CSV nebo v databázi.

Editováno 5.7.2013 12:42
Nahoru Odpovědět 5.7.2013 12:40
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Benjibs
Člen
Avatar
Odpovídá na Kit
Benjibs:

"A ten poslední kód se ti nelíbí? Pokud to chceš tahat ze souboru nebo dvourozměrného pole, tak místo těch dvou putů uděláš cyklus, který projde všechny záznamy a putne je do mapy. Je to hezky zapouzdřené, je to tedy ve stylu OOP."

Ale páčil sa mi.. lenže ten cyklus a vkladanie tých otázok a odpovedí stojí nejaký čas a výkon nie? Ani neviem, či je branie položiek z HashMap-u rýchlejšie ako pole..

"Použití toho pole bych se raději vyhnul. Přece jen je poněkud nepraktické dávat texty dovnitř aplikace. Raději bych je viděl v XML, CSV nebo v databázi."
Ani jedno z tohto zatiaľ neviem :)

Editováno 5.7.2013 17:38
Nahoru Odpovědět 5.7.2013 17:37
1 + 1 = 2
Avatar
Kit
Redaktor
Avatar
Odpovídá na Benjibs
Kit:

Pro těch pár tisíc položek, pro které to potřebuješ, to nehraje zas takovou roli. Pokud bys toho měl víc nebo to chceš často modifikovat, použij raději zmíněné externí způsoby. Tohle je určitě rychlejší, než konverze toho 2D pole:

Map<String,String> test = new HashMap<String, String>(){{
    put("key", "klíč");
    put("cube", "krychle");
    put("interface", "rozhraní");
}};

CSV by mohlo vypadat třeba takto:

key, klíč
cube, krychle
interface, rozhraní

Jenže na načtení toho souboru potřebuješ zmíněný cyklus, který to pole bude číst po řádcích a ukládat do slovníku. Do pár set tisíc řádek by to mohlo stačit, ale na milióny bych raději použil tu databázi.

Nahoru Odpovědět 5.7.2013 17:57
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
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 16 zpráv z 16.