puis-je obtenir la classe .class d'un argument de type générique?
J'ai la classe suivante:
public abstract class MyClass<T extends Object> {
protected T createNewFromData(Reader reader){
GSON.fromJSON(reader,T.class); //T.class isn't allowed :(
}
}
Comment puis-je passer une Classe<T> exemple? Est-il bizarre et loufoque contourner?
Est-il un moyen d'obtenir une Classe<T> référence à d'autres qu'à partir d'un pré-instancié un Objet de type T? Il ne me laisse pas faire:
T t = new T();
Class<T> klass = t.class;
Tentative #2
Fait intéressant, si je supprime le "s'étend JSONOBjBase" à partir de la définition de la classe, j'ai tout simplement obtenir un décoché fonte d'AVERTISSEMENT (pas d'erreur). Est-il une autre façon d'écrire la façon dont le casting est fait?
source d'informationauteur Mike S
Vous devez vous connecter pour publier un commentaire.
Ou vous pouvez envoyer le Classe comme un argument du constructeur et de l'utilisation de l'objet au lieu d'essayer d'obtenir T.class.
Pas.
En raison du type d'effacement, cette information n'existe pas au moment de l'exécution.
Au lieu de cela, vous pouvez ré-utiliser GSON de TypeToken hackce qui crée une classe anonyme qui hérite d'une fermée générique de la classe de base.
OK. C'est la façon dont vous devez le faire :
Et de l'appeler comme ceci :
Ce genre de fait écho à la réponse donnée par Alex ci-dessus. Voici un exemple de code où je suis en train d'écrire un générique json -> POJO wrapper à l'aide de l'jackson bibliothèque:
Et voici comment je l'appelle: