2012-07-09 2 views
3

Alors, comment puis-je faire ce qui suit en Java?Comment obtenir la classe .class d'une entité générique définie?

List<String> strings = new ArrayList<String>();  
JAXBElement<List<String>> jax = new JAXBElement<List<String>>(new QName("strings"), List<String>.class, strings); 

Le problème se produit spécifiquement List.class et l'erreur renvoyée est:

Multiple markers at this line 
- List cannot be resolved to a variable 
- String cannot be resolved to a variable 
- Syntax error on token ">", void expected after this token 

Répondre

4

Vous ne pouvez pas.

L'approximation la plus proche de ce que vous voulez est d'utiliser (Class<List<String>>) List.class.

Ceci est parce qu'il n'y a pas List<String>.class, parce que lors de l'exécution, List<String>, List<Banana>, List<FruitSalad> et List sont tous les mêmes en Java. C'est délibérément fait pour tout un tas de raisons, et il est appelé effacement de type.

+1

"Ceci est délibérément fait pour l'efficacité" Source? Je suis sûr que la raison principale de l'effacement était la rétrocompatibilité. –

+0

Figuré autant. Merci. – Salsero69

+0

Voici un article de Ola Bini sur les problèmes que les génériques pourraient causer dans la JVM: http://olabini.com/blog/2010/07/questioning-the-reality-of-generics/ – jjathman

Questions connexes