Brug af Generics

Tags:    java

Jeg har følgende super klasse:
Fold kodeboks ind/udKode 

Jeg vil gerne kunne extende min SuperClass, kunne initialisere storage som en subklasse af List med en type som er en subklasse af Object, og adde en subklasse af Object til den. Derfor har jeg følgende test klasser.

Fold kodeboks ind/udKode 

Fold kodeboks ind/udKode 

Men i add linjen får jeg følgende fejl:
The method add(capture#2-of ?) in the type List<capture#2-of ?> is not applicable for the arguments
(TestClass1)

Jeg har kigget på flere sider der handler om Generics, men det går lidt hen over mit hoved, og jeg kan ikke se hvad jeg skulle gøre galt.

Er det i det hele taget muligt at gøre det jeg vil, altså at lave en super klasse med en List der kan indeholde alle subklasser af Object, og så specificere i de klasser der extender min super klasse, hvad den liste skal indeholde af objekter?



Indlæg senest redigeret d. 01.04.2009 00:43 af Bruger #12726
5 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Gør SuperClass generisk:

Fold kodeboks ind/udKode 


...og specificer indholdets type i specialiseringerne:
Fold kodeboks ind/udKode 




Det fungerer jo præcis som jeg vil have det! Tusind tak. :) Smid et svar, så får du pointene.

Edit:
Næh, hæng lige på et øjeblik. Jeg har udvidet min SuperClass lidt.

Fold kodeboks ind/udKode 

På trods af dette kan jeg, når jeg debugger, se at output bliver til Object[]. Men hvorfor?



Indlæg senest redigeret d. 02.04.2009 02:25 af Bruger #12726
Det fungerer jo præcis som jeg vil have det! Tusind tak. :) Smid et svar, så får du pointene.

Edit:
Næh, hæng lige på et øjeblik. Jeg har udvidet min SuperClass lidt.

Fold kodeboks ind/udKode 

På trods af dette kan jeg, når jeg debugger, se at output bliver til Object[]. Men hvorfor?


Det er fordi toArray() returnerer et array af typen Object[].

Du kan gøre følgende i stedet:

Fold kodeboks ind/udKode 




Indlæg senest redigeret d. 02.04.2009 11:38 af Bruger #2695
Men i så fald får jeg fejlen "Cannot create a generic array of O".

Edit:
Okay, jeg har langt om længe fundet ud af noget der virker. Men det ser dælme ikke pænt ud.

Fold kodeboks ind/udKode 


Det må da kunne gøres enklere?



Indlæg senest redigeret d. 02.04.2009 23:56 af Bruger #12726
Men i så fald får jeg fejlen "Cannot create a generic array of O".


Hmm...ja, det gør du.

Noget helt andet er så også at det er lidt noget skidt at returnere et array. Der er næsten helt sikkert smartere ting at gøre. Hvad er det du vil ?

Så kan vi nok finde en smartere og pænere løsning.



t