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对象了..
分享到:
相关推荐
//获得当前类型的带有泛型类型的父类... ParameterizedType ptClass = (ParameterizedType) this.getClass().getGenericSuperclass(); //获得运行期的泛型类型 clazz = (Class) ptClass.getActualTypeArguments()[0];
private Class<T> entityClass; public HibernateCommonDAO() { Type type = getClass().... Type[] types = ((ParameterizedType) type).getActualTypeArguments(); entityClass = (Class)types[0]; } }
在上面的代码中,我们使用 `getClass().getGenericSuperclass()` 方法获取当前类的父类,然后使用 `ParameterizedType` 对象获取泛型类型参数。最后,我们使用 `clazz.newInstance()` 方法实例化泛型对象。 完整...
ParameterizedType parameterizedType = (ParameterizedType) FooChild.class.getGenericSuperclass(); Class<?> genericClass = (Class) parameterizedType.getActualTypeArguments()[0]; ``` 这两种方法都可以...
entityClass =(Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } public T get(Serializable id) { T o = (T) getHibernateTemplate().get(entityClass, id);...
Type[] actualTypeArguments = parameterizedType.getActualTypeArguments(); Class<T> entityClass = (Class) actualTypeArguments[0]; } ``` 在了解Java泛型的时候,需要熟悉它们的定义和使用,也要理解编译时...
return (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } } public class UserDao extends JdbcDaoSupport<User> { } ``` 在上面的代码中,我们定义了一个抽象...
this.clazz = (Class) ((ParameterizedType) this.getClass().getGenericSuperclass()) .getActualTypeArguments()[0]; } public void create(T entity) { HibernateUtil.getSession().save(entity); } ...
this.persistentClass = (Class) ((ParameterizedType) getClass() .getGenericSuperclass()).getActualTypeArguments()[0]; } // session factory 的 getter 和 setter } ``` 使用这种方式,每个表的DAO实现类...
在某些场景下,可以通过反射获取泛型的实际类型,如 `(ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]`,但这通常不是常规操作,因为泛型信息在运行时已经被擦除,这种做法的...
entityClass = (Class) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } public T get(Serializable id) { return (T) getHibernateTemplate().get(entityClass, id)...
Type[] types = ((ParameterizedType) type).getActualTypeArguments(); cls = (Class) types[0]; } } public boolean saveInfo(E e) { boolean flag = true; try { Class<?> cls = e.getClass(); String ...
Type[] params = ((ParameterizedType) genType).getActualTypeArguments(); if ((index >= params.length) || (index )) { logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + "'s ...
但可以通过`ParameterizedType`接口获取泛型信息,例如,`((ParameterizedType) clazz.getGenericSuperclass()).getActualTypeArguments()`。 5. **反射与注解** 反射可以用于读取类、方法、字段上的注解。`...