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

在类中使用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,也是不相等的。
慕桂英546537
浏览 692回答 2
2回答

波斯汪

创建一个类继承Demo,使用TypesuperClass=getClass().getGenericSuperclass();Typetype=((ParameterizedType)superClass).getActualTypeArguments()[0];得到泛型类型。

慕运维8079593

按照一楼的使用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);}}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript