获得通用类

我的class级开始

public abstract class LastActionHero(){ 

现在代码中的某个地方我想编写H.class但是这是不可能的(比如String.classInteger.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

您不能 – 该类型在运行时被擦除,并且仅在编译时存在。