亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 711 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號