为了账号安全,请及时绑定邮箱和手机立即绑定

JAVA如何在类中使用ParameterizedType获取泛式类型

JAVA如何在类中使用ParameterizedType获取泛式类型

慕桂英546537 2019-05-13 12:45:25
在类中使用ParameterizedType获取类的实体类的泛式类有以下代码:publicclassDemo{privateClassclazz;publicTgetDemo()throwsInstantiationException,IllegalAccessException{returnclazz.newInstance();}publicstaticvoidtest()throwsInstantiationException,IllegalAccessException{Stringstr=newDemo().getDemo();}}现在我要调用test()方法,获取一个String实体类,但当我调用的时候会抛出NullPointerException指clazz为空值,无法调用。那么这时候我改一下getDemo方法,使用ParameterizedType获取泛式并且赋值publicTgetDemo()throwsInstantiationException,IllegalAccessException{TypesuperClass=getClass();if(superClassinstanceofParameterizedType){Typetype=((ParameterizedType)superClass).getActualTypeArguments()[0];this.clazz=(Class)type;}else{System.out.println("不相等");}returnclazz.newInstance();}但是这时候获取到的superClass为Demo,并不是Demo,因此superClassinstanceofParameterizedType不成立,控制台输出"不相等",clazz仍未null,所以想问一下大家这种情况下要怎么样才能获取到泛型的类呢?注意就算把TypesuperClass=getClass();改为TypesuperClass=getClass().getGenericSuperclass();也是没有用的,因为Demo类不继承其他类,所以获取到的是Object,也是不相等的。
查看完整描述

2 回答

?
波斯汪

TA贡献1811条经验 获得超4个赞

创建一个类继承Demo,使用
TypesuperClass=getClass().getGenericSuperclass();
Typetype=((ParameterizedType)superClass).getActualTypeArguments()[0];
得到泛型类型。
                            
查看完整回答
反对 回复 2019-05-13
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

按照一楼的使用TypesuperClass=getClass().getGenericSuperclass();但同时你测试的时候需要使用匿名内部类的实现,注意MyDemo最后的{},使MyDemo是Demo$0匿名的,使其父类是Demo,而不是Demo。注:这个测试最终什么都打印不出来,因为String.class.newInstance()是空字符串
publicclassDemo{
privateClassclazz;
publicTgetDemo()throwsInstantiationException,IllegalAccessException{
TypesuperClass=getClass().getGenericSuperclass();
if(superClassinstanceofParameterizedType){
Typetype=((ParameterizedType)superClass).getActualTypeArguments()[0];
this.clazz=(Class)type;
}else{
System.out.println("不相等");
}
returnclazz.newInstance();
}
publicstaticvoidmain(String[]args)throwsIllegalAccessException,InstantiationException{
DemoMyDemo=newDemo(){
};
Stringstr=MyDemo.getDemo();
System.out.println(str);
}
}
                            
查看完整回答
反对 回复 2019-05-13
  • 2 回答
  • 0 关注
  • 691 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信