`

((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()

    博客分类:
  • Java
 
阅读更多
getClass().getGenericSuperclass()返回表示此 Class 所表示的
实体(类、接口、基本类型或 void)的直接超类的 Type

然后将其转换ParameterizedType。。

getActualTypeArguments()返回表示此类型实际类型参数的 Type 对象的数组。
[0]就是这个数组中第一个了。。

简而言之就是获得超类的泛型参数的实际类型。。

比如
超类
public class GenericDAO<T> {
private Class<T> entityClass;
protected GenericDAO() {
  Type type = getClass().getGenericSuperclass();
  Type trueType = ((ParameterizedType) type).getActualTypeArguments()[0];
  this.entityClass = (Class<T>) trueType;
 }
}
子类
public class OptionManager extends GenericDAO<MSGC_OPTION> {

}
测试类
public class OracleTest {
public static void main(String[] args) throws Exception {
OptionManager manager = new OptionManager();
}
}
这样在你new OptionManager();以后
超类里的entityClass就是子类那里的
public class OptionManager extends GenericDAO<MSGC_OPTION>
 里面的MSGC_OPTION所对应的class对象了..
分享到:
评论

相关推荐

    basedao的封装

    //获得当前类型的带有泛型类型的父类... ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass(); //获得运行期的泛型类型 clazz = (Class) ptClass.getActualTypeArguments()[0];

    HibernateCommonDAO

    private Class&lt;T&gt; entityClass; public HibernateCommonDAO() { Type type = getClass().... Type[] types = ((ParameterizedType) type).getActualTypeArguments(); entityClass = (Class)types[0]; } }

    Java让泛型实例化的方法

    在上面的代码中,我们使用 `getClass().getGenericSuperclass()` 方法获取当前类的父类,然后使用 `ParameterizedType` 对象获取泛型类型参数。最后,我们使用 `clazz.newInstance()` 方法实例化泛型对象。 完整...

    反射处理java泛型_.docx

    ParameterizedType parameterizedType = (ParameterizedType) FooChild.class.getGenericSuperclass(); Class&lt;?&gt; genericClass = (Class) parameterizedType.getActualTypeArguments()[0]; ``` 这两种方法都可以...

    Java泛型的用法及T.class的获取过程解析

    entityClass =(Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } public T get(Serializable id) { T o = (T) getHibernateTemplate().get(entityClass, id);...

    java泛型深入.pdf

    Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); Class&lt;T&gt; entityClass = (Class) actualTypeArguments[0]; } ``` 在了解Java泛型的时候,需要熟悉它们的定义和使用,也要理解编译时...

    Java 获取泛型的类型实例详解

    return (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } } public class UserDao extends JdbcDaoSupport&lt;User&gt; { } ``` 在上面的代码中,我们定义了一个抽象...

    基于泛型的通用Dao接口和hibernate的实现

    this.clazz = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; } public void create(T entity) { HibernateUtil.getSession().save(entity); } ...

    JSP,SSH框架学习日志3,DAO层.pdf

    this.persistentClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } // session factory 的 getter 和 setter } ``` 使用这种方式,每个表的DAO实现类...

    给公司内部培训的PPT,JAVA技术,泛型

    在某些场景下,可以通过反射获取泛型的实际类型,如 `(ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]`,但这通常不是常规操作,因为泛型信息在运行时已经被擦除,这种做法的...

    java5泛型

    entityClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } public T get(Serializable id) { return (T) getHibernateTemplate().get(entityClass, id)...

    JDBC 实现通用的增删改查基础类方法

    Type[] types = ((ParameterizedType) type).getActualTypeArguments(); cls = (Class) types[0]; } } public boolean saveInfo(E e) { boolean flag = true; try { Class&lt;?&gt; cls = e.getClass(); String ...

    Spring 中优雅的获取泛型信息的方法

    Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); if ((index &gt;= params.length) || (index )) { logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s ...

    java代码-Class类

    但可以通过`ParameterizedType`接口获取泛型信息,例如,`((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()`。 5. **反射与注解** 反射可以用于读取类、方法、字段上的注解。`...

Global site tag (gtag.js) - Google Analytics