Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Benjibs
Člen
Avatar
Benjibs:5.7.2013 10:45

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 Hartinger
Vlastník
Avatar
Odpovídá na Benjibs
David Hartinger:5.7.2013 10:49

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

Nahoru Odpovědět
5.7.2013 10:49
You are the greatest project you will ever work on.
Avatar
Homo
Člen
Avatar
Odpovídá na Benjibs
Homo:5.7.2013 11:01

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
5.7.2013 11:01
1010011 1000101 1011000
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Homo
David Hartinger:5.7.2013 11:02

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

Nahoru Odpovědět
5.7.2013 11:02
You are the greatest project you will ever work on.
Avatar
Homo
Člen
Avatar
Odpovídá na David Hartinger
Homo:5.7.2013 11:04

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 Hartinger
Vlastník
Avatar
Odpovídá na Homo
David Hartinger:5.7.2013 11:07

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
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:5.7.2013 11:37

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
Tvůrce
Avatar
Odpovídá na Homo
Kit:5.7.2013 11:41

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
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:5.7.2013 11:45

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
Tvůrce
Avatar
Odpovídá na David Hartinger
Hartrik:5.7.2013 11:50

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
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:5.7.2013 11:52

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:5.7.2013 12:26

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
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:5.7.2013 12:34

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
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:5.7.2013 12:40

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:5.7.2013 17:37

"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
Tvůrce
Avatar
Odpovídá na Benjibs
Kit:5.7.2013 17:57

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.