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
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.
[1] Proměnná
map
je nejkonkrétnějšího typu, tj.java.util.HashMap<String, MyBean>
, čímž pádem je ale i typujava.util.Map<K,V>
i typujava.lang.Cloneable
ijava.io.Serializable
atd.Mimochodem, je to v příspěvku napsané, možná ne dost jasně 😉
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
Jeste jsem nasel doplnek – mrknete sem:
http://www.cincomsmalltalk.com/userblogs/travis/blogView?showComments=true&entry=3319388250
[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…