37 votes

Comment instancier un objet qui utilise des génériques avec le framework Spring ?

J'ai une classe qui ressemble à ceci :

class Dao<T>{
...
}

Je veux le faire :

new Dao<Student>();

de la configuration de Spring XML.

Est-ce possible ? Comment ?

55voto

matt b Points 73770

Lire à propos de effacement de type devrait vous aider à comprendre un peu mieux.

Au moment de l'exécution, les paramètres de type d'une classe générique sont les suivants effacé . Autrement dit, comme l'a dit Cletus, les génériques en Java sont essentiellement du sucre syntaxique - ils ne sont qu'une fonctionnalité de compilation.

Puisque Spring instancie des objets à l'exécution, il est en fait libre d'instancier une Dao de n'importe quel type - et en fait, rien ne l'empêche de créer une Dao et en passant dans Student dans certaines méthodes et Teacher dans un autre.

Donc, en gros, la réponse est, Spring n'a aucune idée que le Dao est destiné à être paramétré et on ne peut rien en faire.

8voto

cletus Points 276888

Vous ne pouvez pas le faire et la raison pour laquelle vous ne pouvez pas le faire est que cela ne signifie rien en réalité. Je veux dire par là que les génériques Java sont du sucre syntaxique et que le type avec lequel vous créez un haricot n'est pas pertinent. Vous pouvez l'injecter dans n'importe quel objet prenant un Dao (ou Dao) sans problème, auquel cas il utilisera le casting implicite du type dans lequel il a été injecté.

2voto

kgiannakakis Points 62727

Voir ceci post de forum . Vous pouvez en fait utiliser Dao comme classe de votre haricot, mais je ne sais pas si cela est satisfaisant pour vous.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X