有如下泛类public class SimpleRWMapper<T> {
private Class<T> a; public T mapRow(ResultSet rs, int rowNum) throws SQLException {
                //a=........
return a.newInstance();
}
}
代码中泛型是T,T的class是a,我想问下如何取得这个a

解决方案 »

  1.   


    public class SimpleRWMapper<T> {
        private Class<T> a;    public T mapRow(ResultSet rs, int rowNum) throws SQLException {
                    //a=........
            return a.newInstance();
        }
        public Class<T> getClass() {
            return a;
        }
    }
    这样?
      

  2.   


    public class SimpleRWMapper<T> {
        private Class<T> a;    public T mapRow(ResultSet rs, int rowNum) throws SQLException {
                    //a=........
            return a.getClass().newInstance();
        }
    }
      

  3.   

    由于类型擦拭,在运行期得不具体的类型。Java 中的泛型只是在编译期使用的,在编译完成之后,这些类型信息就扔掉了,这种就称为“类型擦拭”。
      

  4.   


    public class SimpleRWMapper<T> {
        private Class<T> a;    public T mapRow(ResultSet rs, int rowNum) throws SQLException {
                    //a=........
            Class clazz = a.getClass();
            Constructor constructor  = clazz.getConstructor();
            return constructor.newInstance();
        }
    }晕哦,光看楼主的问题忘了看到newinstance()了,想要得到Class就 用对象.getClass()就得到了,要newInstance()的话还需要Constructor这样的对象呵呵
      

  5.   

    那有办法得到T的class吗?随便说下,6楼是错误的,因为a是空的,a.getClass()会出NullPointerException
      

  6.   

    除非是继承泛型类,那么在子类中可以通过反射得到T的类型,具体例子参照hibernate的GenericDao
      

  7.   

    Java的泛型机制做不到这一点. 除非子类继承这个类的时候指定具体类型.
      

  8.   

    泛型类的子类里可以通过(Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
      

  9.   


    因为那所谓通用的 DAO,是在类声明时明确了泛型类型,并不是泛型参数。