Nebyl bych si tak jisty, jestli to reseni v .NET je lepsi nez v Jave. V .NET museli pridat dalsi vlastnost jazyka "in" a "out", cimz se jazyk zase komplikuje. V Jave je bezne, kdyz uz ty generika programatora s**ou udelat jiz uvedene
List<T> list = (List)listParam; //překladačem projde i za runtime a spolu se SupressWarning a jede se vesele dal. Takove reseni jsem beze videl treba v Hibernate nebo jinych proflaklych knihovnach, i kdyz nekdy sla dana situace vyresit spravnou aplikaci Java generik (extends, super, ?). Ano zaryti puriste jiste vznesou namitky, ale pokud je funcknost uzavrena v nejake tride/metode/modulu a otestovana, tak to IMHO nevadi. 2011/9/20 Petr Balat <[email protected]>: > - Dobře tedy pro kompilátor je to jiná třída ale výsledek pro jvm je to ta > samá. na tom se snad shodneme at tu neslovičkaříme > :-) > - jinak jsem psal ze generiky pro překladač nejsou koo. ani koontra. tak jak > jste vypsal odstravec z wiki viz "Unlike arrays, generic classes are neither > covariant nor contravariant". > Nicméně myslím si že je důležitější vědět jak se generiky mají v plném > kontextu, takže i vlastnosti jvm, proto ten komentář. > Aby se začátečník nespletl např. při kontrole instanceof apod. kde ten > rozdíl mezi runtime a kompilaci je potřeba znát. > Pokud programátor potřebuje pracovat s reflexí tak už tato znalost je nutná. > -ano do .net museli přidat koo. a kontra. v gener. protože to nešlo obejít > tak jako v jave (když pomineme warning za předpokladu že programátor musí > znát i výsledek kompilace). > V .NETu je IList<string> a IList<object> jinej typ jak pro kompilátor tak i > pro virtuální mašinu. > List<Predek> map = (List)listPotomek; //překladačem projde i za runtime a > nejspíš bude typová kontrola pro další část kódu užitečná. > //v .net by to za runtime spadlo > Petr > > > Dne 20. září 2011 15:15 "Zdeněk Troníček" <[email protected]> napsal(a): >> >> Ladislav Thon napsal(a): >> >> - V Javě je Iterable<String> potomkem Iterable<Object> protože je to >> > v reálu ten samej objekt - pouze překladač nás může chránit tak jako >> > máte >> > ve >> > 2 příkladě.. (to samé pro List) >> > >> > IMHO nejlepší je dívat se na parametrizované třídy jako na funkce, které >> > vytváří "normální" třídy, a vykašlat se na implementační detaily (i když >> > ty >> > detaily v Javě jsou někdy bohužel pekelně důležité). >> > >> > A i když sestoupíte na tu implementační úroveň, stejně není podstatné, >> > jestli je Iterable<String> potomkem Iterable<Object> (což technicky je, >> > pokud definujeme relaci dědičnosti jako reflexivní), ale to, jestli >> > Iterable<String> je nebo není _podtypem_ Iterable<Object>. A to rozhodně >> > není. >> >> Jenže tahle diskuze je o překladu a warningu překladače. Jinak Tvoje >> terminologie mě překvapuje, protože pro mě jsou potomek a podtyp synonyma. >> >> Z.T. >> -- >> Zdenek Tronicek >> FIT CTU in Prague >> > > -- Ondra Medek
