[Java + Generics] Cannot determine type

Pagina: 1
Acties:

  • ari3
  • Registratie: Augustus 2002
  • Niet online
Gegeven de volgende klasse:
Java:
1
public class EntityList<E extends Entity> implements Serializable {


en een klasse met een lijst van entiteitlijsten:
Java:
1
public List<EntityList<? extends Entity>> listOfEntityLists = new ArrayList<EntityList<? extends Entity>>();


Nu wil ik een methode hebben waarin ik op basis van een klasse een lijst uit voorgenoemde lijst van entiteitlijsten zoek.
Java:
1
public abstract EntityList<T> getEntityListByType(Class<T extends Entity> c);


Hierbij klaagt de compiler: "T cannot be resolved to a type". Kan iemand zeggen waarom?

Dit werkt overigens wel:
Java:
1
public abstract EntityList<? extends Entity> getEntityListByType(Class<? extends Entity> c);

Maar dan zou ik toch een EntityList<FooEntity> retour kunnen krijgen als ik een BarEntity.class als argument geef?

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • akaIDIOT
  • Registratie: Januari 2005
  • Laatst online: 03-10 23:33
Ik vermoet dat je dan T ergens gedeclareert moet hebben, bijvoorbeeld als in je classdefinitie:
Java:
1
public class EntityList<T extends Entity> implements Serializable {

(T ipv E)

Je gebruikt T hier als een los, voor de compiler nog onbekend type. ? werkt wel, gezien dit elk type accepteert. Helaas kan je dan geen EntityList met een bekend type (je T) returnen...

Generics blijft een onderwerp wat tot hersenbrekers leidt als je met dit soort dingen gaat epxerimenteren, dus als er iemand is die het zeker weet, verbeter / vul mij aan ;)

*stu!ter* *boink*


  • BalusC
  • Registratie: Oktober 2000
  • Niet online

BalusC

Carpe diem

Je moet de typen inderdaad eerst declareren in de definitie van de klasse :)
Zie ook http://balusc.xs4all.nl/srv/dev-jsw-gen.html#GeneriekeTypen

  • NetForce1
  • Registratie: November 2001
  • Laatst online: 08:51

NetForce1

(inspiratie == 0) -> true

Je kunt een methode ook typeren, los van de typering van de klasse:
Java:
1
public abstract <T extends Entity> EntityList<T> getEntityListByType(Class<T> c);

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"


  • ari3
  • Registratie: Augustus 2002
  • Niet online
NetForce1 schreef op donderdag 29 maart 2007 @ 09:20:
Je kunt een methode ook typeren, los van de typering van de klasse:
Java:
1
public abstract <T extends Entity> EntityList<T> getEntityListByType(Class<T> c);
Ik was deze notatie nog niet eerder tegenkomen. Dit is inderdaad de oplossing. Nu is getEntityListByType type-safe. :)

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • NetForce1
  • Registratie: November 2001
  • Laatst online: 08:51

NetForce1

(inspiratie == 0) -> true

Staat allemaal beschreven in de Java Generics Tutorial

De wereld ligt aan je voeten. Je moet alleen diep genoeg willen bukken...
"Wie geen fouten maakt maakt meestal niets!"

Pagina: 1