如何获得泛型课程

时间:2010-02-08 16:50:19

标签: java generics syntax

Class Model<T>{

   private T t;

   .....


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

   .....

}

当然它会引发NPE。

Class c = t.getClass();

如果我的实例为null,我应该使用什么语法来获取T的类? 有可能吗?

3 个答案:

答案 0 :(得分: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 :(得分:-1)

你可以用反射来做到这一点:

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

答案 2 :(得分:-1)

你可以在不通过课程的情况下完成:

class Model<T> {
  Class<T> c = (Class<T>) DAOUtil.getTypeArguments(Model.class, this.getClass()).get(0);
}

您需要此文件中的两个功能:http://code.google.com/p/hibernate-generic-dao/source/browse/trunk/dao/src/main/java/com/googlecode/genericdao/dao/DAOUtil.java

有关详细说明:http://www.artima.com/weblogs/viewpost.jsp?thread=208860