如何获取泛型类的类名

3
Class Model<T>{

   private T t;

   .....


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

   .....

}

当然会抛出NPE异常。

Class c = t.getClass();

如果我的实例为空,我应该使用什么语法来获取T的类?这是否可能?

如果您的实例为null,它怎么可能有一个类类型呢? - froadie
2
据我所知,这是不可能的。请记住,泛型是编译时而非运行时的。更常见的处理方式是存储一个保留类的Class对象(如果你确实需要它)。 - Kylar
我同意Kylar和froadie的观点:您需要为“t”添加一个非空值的额外检查。 - dma_k
3个回答

7

由于类型擦除,这是不可能的。

以下是解决方法:

class Model<T> { 

    private T t; 
    private Class<T> tag;

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

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

-1

你可以使用反射来实现这个功能:

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

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接