2010-02-08 7 views
3
Class Model<T>{ 

    private T t; 

    ..... 


    private void someMethod(){ 
     //now t is null 
     Class c = t.getClass(); 
    } 

    ..... 

} 

Bien sûr, il lance NPE.Comment obtenir la classe générique

Class c = t.getClass(); 

Quelle syntaxe dois-je utiliser pour obtenir la classe de T si mon exemple est nul? Est-ce possible?

+0

Si votre instance est null, comment t aurait un type de classe? – froadie

+2

Ce n'est pas possible, au meilleur de ma connaissance. Rappelez-vous, les génériques sont à la compilation, pas à l'exécution. Une façon plus courante de gérer cela serait de stocker un objet Class qui garde la classe (si vous en avez vraiment besoin). – Kylar

+0

A d'accord avec, Kylar et froadie: vous devez ajouter un contrôle supplémentaire pour la valeur non nulle pour "t". –

Répondre

7

Ce n'est pas possible en raison de l'effacement du type.

Il est la solution suivante:

class Model<T> { 

    private T t; 
    private Class<T> tag; 

    public Model(Class<T> tag) { 
     this.tag = tag; 
    } 

    private void someMethod(){ 
     // use tag 
    } 
} 
-1

Vous pouvez le faire avec la réflexion:

Field f = this.getClass().getField("t"); 
Class tc = f.getType(); 
+1

Ça ne marcherait pas. 'tc' serait' Object' – axtavt

Questions connexes