2009-09-23 7 views
1

J'ai une classe comme ceci:Comment accéder Collection Type générique Classe

public class SubClass <T> extends SuperClass<Collection<T>>{ 
    public Class<T> getInner() { 
     // What goes here? 
    } 
} 

Où SuperClass est tout simplement une classe générique. Ma question est de savoir comment accéder à un objet Class pour le renvoyer? Je ne peux pas sembler pouvoir faire ceci à cause de l'effacement de Type.

Une aide?

+1

Il serait utile que vous nous expliquiez plus en détail ce que vous essayez précisément de faire, car votre approche peut être erronée. –

+0

cette classe factice reflète une classe de ma production qui est difficile à décrire ici. Je suis convaincu que ce que je dois faire ne peut pas être fait puisque j'ai une restriction pour aucun constructeur d'argument. De plus, je viens de remarquer un défaut dans ma conception de cette classe. Toutes les sous-classes que je veux pour la superclasse ne doivent pas être génériques et c'est. Je vais l'utiliser comme un cas particulier. problème 'résolu' –

Répondre

4

Exactement, l'effacement de type signifie que vous devez le faire explicitement.

Fondamentalement, vous avez besoin SubClass pour prendre un Class<T> en tant que paramètre dans le constructeur, puis s'y accrocher. Vous pouvez toujours vous retrouver avec des problèmes d'effacement de type là, si T est en fait censé être (par exemple) List<String>. Voir Neal Gafter's blog pour plus d'informations sur ceci et une solution de contournement, et le Guice 2.0 TypeLiteral class pour une implémentation.

+0

hmm j'avais peur que ce soit la seule option ... Je dois avoir cette classe sans constructeur avec des paramètres car c'est l'une des nombreuses sous-classes de superclasse qui sont créées en utilisant la réflexion avec un appel sans paramètre au méthode newInstanse. Donc, il n'y a absolument aucun truc que je peux utiliser pour contourner ce restriciton? Tout hack laid aiderait :) –

+0

Non. L'information n'est tout simplement pas présente à l'exécution. –

+0

mettre à jour à votre réponse: Je vais seulement passer des classes non génériques à la collection de sorte que le problème d'effacement de type ajouté n'apparaîtra pas. –

Questions connexes