Java 获取泛型类
我的课从Java 获取泛型类,java,class,generics,types,parameterized,Java,Class,Generics,Types,Parameterized,我的课从 public abstract class LastActionHero<H extends Hero>(){ 公共抽象类LastActionHero(){ 现在,我想在代码中的某个地方编写H.class,但这是不可能的(比如String.class或Integer.class是) 您能告诉我如何获得泛型的类吗?您不能-该类型在运行时被删除,并且仅在编译时存在。您可以动态提供该类型,但是编译器不会自动为您执行此操作 public abstract class LastA
public abstract class LastActionHero<H extends Hero>(){
公共抽象类LastActionHero(){
现在,我想在代码中的某个地方编写H.class
,但这是不可能的(比如String.class
或Integer.class
是)
您能告诉我如何获得泛型的
类吗?您不能-该类型在运行时被删除,并且仅在编译时存在。您可以动态提供该类型,但是编译器不会自动为您执行此操作
public abstract class LastActionHero<H extends Hero>(){
protected final Class<H> hClass;
protected LastActionHero(Class<H> hClass) {
this.hClass = hClass;
}
// use hClass how you like.
}
公共抽象类LastActionHero(){
受保护的最终类hClass;
受保护的LastActionHero(类hClass){
this.hClass=hClass;
}
//按你喜欢的方式使用hClass。
}
顺便说一句:动态地获取它并非不可能,但这取决于它的使用方式
public class Arnie extends LastActionHero<MuscleHero> { }
公共类Arnie扩展了LastActionHero{}
可以确定Arnie.class有一个具有泛型参数MuscleHero的超类
public class Arnie<H extend Hero> extends LastActionHero<H> { }
公共类Arnie扩展了LastActionHero{}
在这种情况下,超类的泛型参数将仅为H
。一种方法是保持对参数化类型的引用,就像具有
private Class<H> clazz;
私有类clazz;
并创建一个setter或构造函数,它接受类
参数化类型在运行时被擦除,因此您不能按要求执行操作。我们按以下方式执行:
private Class<T> persistentClass;
public Class<T> getPersistentClass() {
if (persistentClass == null) {
this.persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
return persistentClass;
}
私有类persistentClass;
公共类getPersistentClass(){
if(persistentClass==null){
this.persistentClass=(Class)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
返回persistentClass;
}
您无需通过课程即可完成:
public abstract class LastActionHero<H extends Hero>() {
Class<H> clazz = (Class<H>) DAOUtil.getTypeArguments(LastActionHero.class, this.getClass()).get(0);
}
公共抽象类LastActionHero(){
类clazz=(类)DAOUtil.getTypeArguments(LastActionHero.Class,this.getClass()).get(0);
}
此文件中需要两个函数:
有关更多说明: