获得通用类
我的class级开始
public abstract class LastActionHero(){
现在代码中的某个地方我想编写H.class
但是这是不可能的(比如String.class
或Integer.class
)。
你能告诉我如何获得通用的Class
吗?
您可以动态提供类型,但编译器不会自动为您执行此操作。
public abstract class LastActionHero(){ protected final Class hClass; protected LastActionHero(Class hClass) { this.hClass = hClass; } // use hClass how you like. }
BTW:动态获取它并非不可能,但这取决于它的使用方式。 例如
public class Arnie extends LastActionHero { }
可以确定Arnie.class有一个带有Generic参数MuscleHero的超类。
public class Arnie extends LastActionHero { }
在这种情况下,超类的generics参数将只是H
我们通过以下方式实现:
private Class persistentClass; public Class getPersistentClass() { if (persistentClass == null) { this.persistentClass = (Class ) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; } return persistentClass; }
一种方法是保持对参数化类型的引用,例如具有属性
private Class clazz;
并创建一个接收Class
的setter或构造函数。
参数化类型在运行时被删除,因此您无法按照自己的要求进行操作。
你可以在不通过课程的情况下完成:
public abstract class LastActionHero() { Class clazz = (Class ) DAOUtil.getTypeArguments(LastActionHero.class, this.getClass()).get(0); }
您需要此文件中的两个function: 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
您不能 – 该类型在运行时被擦除,并且仅在编译时存在。