Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Genericita

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Genericita

Autor: Behnil

10:41:23 20.05.2011

Diky za odpoved.

Myslim, ze hlavni problem byl v tom, ze jsem si neuvedomoval existenci type erasure.

Chtel jsem udelat "klasickou" tovarni metodu pro generickou abstraktni tridu, ktera by vytvarela jeji potomky na zaklade parametrizacniho typu.

Citovat příspěvek

 

Re: Genericita

Autor: zalusky

9:37:40 20.05.2011

Dobrý den,

za prvé: Typový parametr K definovaný u statické metody getInstance() je
jiný než K definovaný u třídy A. Je to jen shoda jmen.

Za druhé: v getInstance se vrací v podstatě A, ale navenek se metoda
tváří, že vrací A pro libovolné K. Kdyby to překladač povolil, pak by
bylo možné napsat
class D implements Serializable {}
A ad2 = getInstance();
a přiřazení z A do A by spadlo až za běhu, což je proti hlavnímu účelu
generik.

Kořen problému je v tom, že v metodě getInstance pravděpodobně chcete
vytvářet různé potomky A, což se rozhoduje až v runtime, a zároveň do
signatury procpat generický argument potomka, což je ale záležitost
compile-time. K čemu tam takový argument klientovi metody getInstance() ale
bude, když to za překladu nelze rozhodnout?

Do zkompilovatelného stavu to dostanete opravou na public static ASerializable> getInstance(), ale problém vidím spíš v tom, co od toho API
vlastně očekáváte.

Tomáš Záluský


2011/5/18 Behnil

>
>
> Ahoj, mam trosku problem pochopit jak funguje genericita(genericnost?).
>
> Mam tyto tridy:
>
> abstract class A {}
> class B extends A{}
> class C implements Serializable {}
>
> a chtel bych udelat tovarni metodu pro abstraktni tridu A. Jak to udelam??
> Kdyz napisu tohle:
>
> public static A getInstance() {
> return new B();
> }
>
> tak mi prekladac hlasi chybu "Type mismatch: cannot convert from B to A"
> :S
>
> Poradi nekdo?
> --
> Autor: Behnil
> Forum: Java
> Odkaz: http://forum.builder.cz/read.php?14,3323675,3323675#msg-3323675
>


Příspěvek zaslán emailem

Citovat příspěvek

 

Genericita

Autor: Behnil

16:51:41 18.05.2011

Ahoj, mam trosku problem pochopit jak funguje genericita(genericnost?).

Mam tyto tridy:

abstract class A {}
class B extends A{}
class C implements Serializable {}

a chtel bych udelat tovarni metodu pro abstraktni tridu A. Jak to udelam?? Kdyz napisu tohle:

public static A getInstance() {
return new B();
}

tak mi prekladac hlasi chybu "Type mismatch: cannot convert from B to A"
:S

Poradi nekdo?

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: