Récupère l'objet "Class" du type générique T
Je veux faire des génériques fonction qui retourne la représentation d'Objet de document XML (à l'aide de JAXB). J'ai besoin de passer "de la classe" objet de JAXBContext constructeur, mais comment je peux l'obtenir à partir de T?
public <T> readXmlToObject(String xmlFileName, T jaxbClass) {
JAXBContext context = JAXBContext.newInstance(T.class); //T.class - here error, how to get it?
.......
}
source d'informationauteur MyTitle
Vous devez vous connecter pour publier un commentaire.
Passer à la classe de l'objet à sa place, et il est facile.
L'idée ici est que, puisque vous ne pouvez pas extraire le paramètre de type de l'objet, vous devez le faire dans l'autre sens: démarrer avec la classe, puis de manipuler l'objet en fonction du type de paramètre.
De ne pas écouter les autres... vous POUVEZ l'obtenir.
Il suffit de modifier le type de la
jaxbClass
paramètreClass<T>
:Vous ne pouvez pas obtenir la classe au moment de l'exécution. Java implémente les Génériques de Type Sécurité d'Effacement, ce qui signifie que la compréhension du type Générique est appliquée uniquement à travers la compilation. Vous devez interogate l'objet réel au moment de l'exécution si vous voulez obtenir sa catégorie.
essayer de passer à la classe elle-même, quelque chose comme cela
Prendre un coup d'oeil à cette SORTE de réponse.
Fondamentalement, le type T n'est pas disponible au moment de l'exécution de Java génériques sont soumis à l'effacement par le compilateur.
Heureusement, vous avez déjà une instance de votre classe, de sorte que vous pouvez obtenir les informations de type à partir de là: