7
votes

Comment puis-je apprendre l'argument de type réel d'une classe générique?

J'ai une classe paramétrée: xxx

appelant: xxx

alors comment puis-je obtenir le type actuel de t à l'aide des génériques Java?


0 commentaires

4 Réponses :


8
votes

Vous pouvez utiliser ce truc dans votre constructeur: (voir http://www.hibernate.org/328 .html ) xxx

Mais je crois que ce code ne fonctionne que lorsque la classe est sous-classée et une instance de la sous-classe l'exécute.


1 commentaires

Je connais ce truc et j'utilise sur les classes Dao. Mais ce n'est pas ce que je cherche. Pour utiliser ce truc, je suppose que nous devons définir la valeur réelle du type générique de la classe mère sur Sourcecode. GenericDao UserDao étend GenericDao



3
votes

Si vous voulez dire seulement de l'objet lui-même, vous ne pouvez pas. Erasure de type signifie que les informations sont perdues.

Si vous avez un champ qui utilise le type paramétré avec un argument de type en béton, que les informations sont conservées.

Voir FAQ des génériques de Langer Angelika Langer , et en particulier le Section sur Type Erasure .


0 commentaires

11
votes

Cela peut être fait, mais Effacement peut le rendre très difficile. Comme les autres réponses discutent, vous devez soit faire une sous-classe de paramétré.caplass T à paramétriceClass et le code de réflexion Vous devez le faire est compliqué.

Ce que je recommande dans ces circonstances, est de contourner le problème comme celui-ci: xxx

en raison de la conclusion de type de Java pour des méthodes statiques , vous pouvez construire votre classe sans trop de cuillère supplémentaire: xxx

de cette façon, votre paramétrice est entièrement générique et tamis-coffre-fort, et vous avoir accès à l'objet de la classe.

EDIT : Adressé le commentaire


2 commentaires

Il est possible. Cette réponse est fausse. Vérifiez l'autre réponse qui a la solution.


@Adamarold Je ne le savais pas encore à l'époque où j'ai écrit la réponse, mais vous avez raison. Je ne le recommande toujours pas, cependant. J'ai mis à jour ma réponse en conséquence.



0
votes

Il s'agit d'un sujet surtout problématique, car cela ne fonctionne que dans certaines conditions telles que prévu (de manière appropriée dans des scénarios complexes).

mais xebia a publié un Bon article sur le tout.


0 commentaires