TOMÁŠ HUBÁLEK BLOG: BAVTE SE PŘIMĚŘENĚ…

Java 5.0 Generics: Chci klíčové slovo var, jako má C# 3.0…

Written By: Tomáš Hubálek - Jun• 23•06

Už toho mám dost. Poté, co jsem dneska snad 50x napsal

 Map<String, MyBean> map = new HashMap<String, MyBean>(); 

už mě může vzít čert. Nechápu, proč to musím tolikrát opisovat. Stačilo by klíčové slovo var, které má být v nové verzi C# 3.0 a bylo by po problému.

Pak by se jednoduše napsalo

 var map = new HashMap<String, MyBean>(); 

a proměnná map by byla typu HashMap<String, MyBean>.

Viz. např. na http://www.codepost.org/view/126

You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

5 Comments

  1. 3rojka says:

    Nezní to špatně, taky mně to pčes štve, ale jakého typu bude nakonec ta tvoje proměnná map? Bude to Map nepo HashMap. Jenom by mě zajímalo jak by si stím compilator pohrál pokud by instance tvého objecktu implementovala více rozhraní. Nebo si to představuješ jako, že by byla tokového typu jaký zrovna potřebuješ při použití. Nevím … snad by to šlo.

  2. Tom says:

    [1] Proměnná map je nejkonkrétnějšího typu, tj. java.util.HashMap<String, MyBean>, čímž pádem je ale i typu java.util.Map<K,V> i typu java.lang.Cloneable i java.io.Serializable atd.

    Mimochodem, je to v příspěvku napsané, možná ne dost jasně 😉

  3. saboter says:

    Nejsem prilis pro. A ani v nove verzi .net se mi tato konstrukce nezamlouva. Mam hned nekolik duvodu: Pri deklaraci promenne bychom meli premyslet, jakeho typu ji vlastne chceme. Sam jste pouzil jako typ Map, ale priradil jste HashMap. Tento pristup je velmi vhodny, nebot vysledny kod je robustnejsi vuci potrebnym zmenam (muzete nahradit HashMap nejakou vyhodnejsi implementaci pro danou situaci, pokud implementuje interface Map). var by vytvorilo promennou typovanou jako HashMap (jak jste sam uvedl). Mnohdy se vam take stane, ze prirazujete hodnotu v konstrukci if else. V tuto chvili nelze var vubec pouzit, nebot typ promenne je neznamy. Program se vam bude potom hemzit misty slovy var a jinde konkretnimi deklaracemi. Dalsi bolistka jsou "klasicke" boje u ciselnych typu. Ma byt 10 int nebo long nebo v budoucnosti treba BigDecimal? Ano, muzete tuto drobnost upravit priponami L apod. , ale kolik lidi na neco takoveho zapomene? Myslim, ze dobre IDE by vam melo druhou cast vyrazu po napsani HashMap doplnit na <String, MyBean>. Stavajici pristup mi prijde bezpecnejsi. Nerad bych ladil zaludne chyby vznikle vyuzitim tohoto klicoveho slova. Cas potrebny pro napsani Map<String, MyBean> je z hlediska casu tvorby realneho projektu naprosto zanedbatelny

  4. Tom says:

    [3] No já stále nevím, co je špatného na def myMap = new HashMap<A,B>(); Pokud budu chtít použít jinou implementaci interface Map, tak ho prostě použiju a deklarace proměnné se změní.

    Podle mě kouzlo var je právě pro lokální proměnné, pro jakékoliv jiné to nemá smysl.

    Pokud jde o to IDE, tak to je určitě pravda. Niméně, pokud jste někdy psal nějaký větší unit test s nějakým komplexním objektem (bean beanů beanů), je tam toho vypisování fakt hodně a k čitelnosti kódu to rozhodně nevede. Stejně tak parsování XML apod. Taky nic moc…

Leave a Reply

Your email address will not be published. Required fields are marked *