Objet de classe de la classe générique (java)
est-il un moyen en java pour obtenir une instance de quelque chose comme Class<List<Object>>
?
Vous devez vous connecter pour publier un commentaire.
est-il un moyen en java pour obtenir une instance de quelque chose comme Class<List<Object>>
?
Vous devez vous connecter pour publier un commentaire.
comment sur
(Class<?>)
vraiment nécessaire ? Dans mes tests, il semble que(Class<List<Object>>)List.class
est assez.Class<List>
. Un casting deClass<List>
àClass<List<Object>>
était illégale (car pas de type pourrait être un sous-type des deux) la dernière fois que j'ai vérifié(Class<ArrayList<Object>>) (Class<?>) List.class
fait.java.awt.List
au lieu de l'interfacejava.util.List
). Vérifiez vos importations.Maintenant, vous appelez:
(Class<List<Object>>)(Class<?>)List.class
mais si vous avez besoin de plusieurs objets de la classe, vous n'aurez qu'une décoché coulé à l'intérieur de la ClassUtil.En raison du type d'effacement, au niveau de la Classe, tous les interfaces sont les mêmes. Ils ne sont différents au moment de la compilation. Vous pouvez donc avoir
Class<List>
comme un type, oùList.class
est de ce type, mais vous ne pouvez pas obtenir plus que cela, parce qu'elles ne sont pas séparées des classes, il suffit de taper les déclarations qui sont effacés par le compilateur dans les conversions explicites.Comme mentionné dans d'autres réponses,
Class
représente une effacé type. Pour représenter quelque chose commeArrayList<Object>
, vous voulez unType
. Un moyen facile d'obtenir c'est:Le générique de type Api introduit dans la version 1.5 sont relativement faciles à trouver votre chemin autour.
Vous pouvez utiliser Jackson
ObjectMapper
Pas décoché les avertissements, pas de Liste vide instances flottant autour.
Vous pouvez obtenir un objet de classe pour le type de Liste à l'aide de:
ou
Mais parce que java génériques sont mis en œuvre à l'aide de les ratures vous ne pouvez pas obtenir un spécialisés objet de chaque classe.
le type spécifique de génériques est "effacée" au moment de la compilation.