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