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
>
>

Odpovedet emailem