在类中使用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];得到泛型类型。
慕运维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);}}
添加回答
举报
0/150
提交
取消