免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版
打開APP
未登錄
開通VIP,暢享免費電子書等14項超值服
開通VIP
首頁
好書
留言交流
下載APP
聯(lián)系客服
關(guān)于Java如何讀取泛型類型參數(shù)
hh3755
>《基礎(chǔ)》
2014.08.27
關(guān)注
一般使用反射來獲取泛型類型信息
如下代碼:
Java代碼
package myGenetic;
import java.lang.reflect.Field;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
public class GenericTest {
/*使用反射來獲取泛型信息*/
private Map<String, Integer> score;
public static void main(String[] args) throws SecurityException, NoSuchFieldException {
//Class clazz = GenericTest.class;
Class<GenericTest> clazz = GenericTest.class;
//System.out.println(clazz);
Field f = clazz.getDeclaredField("score");
//直接使用getType只對普通類型有效,無法取到泛型參數(shù)
Class<?> a = f.getType();
System.out.println("score的類型是:"+a);
//獲得Field實例f的泛型類型
Type gType = f.getGenericType();
//如果gType類型是ParameterizedType的對象
if (gType instanceof ParameterizedType) {
ParameterizedType pType = (ParameterizedType) gType;
//獲取原始類型
Type rType = pType.getRawType();
System.out.println("原始類型是:"+rType);
//取得泛型類型參數(shù)
Type[] tArgs = pType.getActualTypeArguments();
System.out.println("泛型類型是:");
for (int i = 0; i < tArgs.length; i++) {
System.out.println("第"+i+"個泛型類型是:"+tArgs[i]);
}
}else{
System.out.println("獲取泛型類型出錯!");
}
}
}
輸出結(jié)果如下:
score的類型是:interface java.util.Map
原始類型是:interface java.util.Map
泛型類型是:
第0個泛型類型是:class java.lang.String
第1個泛型類型是:class java.lang.Integer
還有一個較好的例子,多用于實現(xiàn)BaseDAO,代碼如下:
Java代碼
package myGenetic;
import java.lang.reflect.ParameterizedType;
class SubClass extends SuperClass<Person> {
public SubClass() {
super();
}
}
class Person {
public Person() {
super();
}
public void function() {
System.out.println("function in Person.class...");
}
}
public abstract class SuperClass<T> {
private Class<T> clazz;
@SuppressWarnings("unchecked")
public SuperClass() {
clazz = (Class<T>) ((ParameterizedType) super.getClass()
.getGenericSuperclass()).getActualTypeArguments()[0];
}
public Class<T> getClazz() {
return clazz;
}
public void setClazz(Class<T> clazz) {
this.clazz = clazz;
}
/**
* 普通的非泛型類Class
* 泛型化的類Class<T>
* JDK中,普通的Class.newInstance()方法的定義返回Object,要將該返回類型強制轉(zhuǎn)換為另一種類型;
* 但是使用泛型的Class<T>,Class.newInstance()方法具有一個特定的返回類型;
* @param args
*/
public static void main(String[] args) {
SuperClass<Person> subClass = new SubClass();
//1.得到泛型類T實際的完整類名
System.out.println(subClass.getClazz());
//2.得到泛型類T的對象
try {
System.out.println(subClass.getClazz().newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
//3.調(diào)用泛型類T的方法
try {
subClass.getClazz().newInstance().function();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
輸出結(jié)果如下:
class myGenetic.Person
myGenetic.Person@10d448
function in Person.class...
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請
點擊舉報
。
打開APP,閱讀全文并永久保存
查看更多類似文章
猜你喜歡
類似文章
JAVA反射總結(jié)
java 泛型 深入
java5如何得到泛型的類型參數(shù)
java里如何獲取泛型的類型
泛型40-43
Classworking 工具箱: 反射泛型
更多類似文章 >>
生活服務(wù)
首頁
萬象
文化
人生
生活
健康
教育
職場
理財
娛樂
藝術(shù)
上網(wǎng)
留言交流
回頂部
聯(lián)系我們
分享
收藏
點擊這里,查看已保存的文章
導(dǎo)長圖
關(guān)注
一鍵復(fù)制
下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!
聯(lián)系客服
微信登錄中...
請勿關(guān)閉此頁面
先別劃走!
送你5元優(yōu)惠券,購買VIP限時立減!
5
元
優(yōu)惠券
優(yōu)惠券還有
10:00
過期
馬上使用
×