Podle mého názoru jsou generické typy v .NET trochu lepší. Hlavní argument je ten, že odmazaní typového parametru vede k tomu, že jej nelze použít např. za new nebo instanceof. A to většina programátorů neočekává. Proto se mi zdají generické typy v .NET více intuitivní a tudíž lepší.
Z.T. -- Zdenek Tronicek FIT CTU in Prague Ondra Medek napsal(a): > 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 > >
