日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java 获取泛型的type,如何获取泛型的Type类型

發(fā)布時(shí)間:2023/11/27 生活经验 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java 获取泛型的type,如何获取泛型的Type类型 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

開發(fā)中很多時(shí)候都遇到或使用到泛型。例如在json轉(zhuǎn)換成bean對(duì)象或其他對(duì)象,而對(duì)象中存在泛型,這時(shí)候需要用到TypeToken。

Type:是java里的 java.lang.reflect.Type;

TypeToken:是guava提供的抽象類能夠獲取泛型類型

開門見山

通過TypeToken獲取泛型Type類型TypeToken?typeToken?=?new?TypeToken>>(){};

Type?type?=?typeToken.getType();

舉個(gè)栗子

例如通過JSON字符串轉(zhuǎn)換成對(duì)象 且 還要保持原有類型(包括泛型類型)

1、模擬數(shù)據(jù)列表//模擬數(shù)據(jù)列表

List>?list?=?new?ArrayList>();

list.add(new?User(1,"hello"));

list.add(new?User(2,"world"));

String?json?=?JSONArray.toJSONString(list);

System.out.println(json);

//輸出:[{"id":1,"name":"hello"},{"id":2,"name":"world"}]

2、不使用TypeToken//我們來看看不使用TypeToken的情況

List>?result1?=?JSONArray.parseObject(json,?list.getClass());

System.out.println(result1);

//輸出:[{"id":1,"name":"hello"},?{"id":2,"name":"world"}]

看下圖,使用調(diào)試看到,執(zhí)行完result1的時(shí)候看到:result1對(duì)象為ArrayList,User對(duì)象不能正常轉(zhuǎn)化類型為JSONObject,User對(duì)象屬性變了HashMap了。

3、使用TypeToken//再來看看使用TypeToken的情況

List>?result2?=?JSONArray.parseObject(json,?type);

System.out.println(result2.get(0).getName().getClass());

//輸出:[com.weizhixi.test.User@db8155,?com.weizhixi.test.User@107f7fe]

//輸出:class?java.lang.String

再來下圖,使用調(diào)試看到,執(zhí)行完result2的時(shí)候看到:result2象為ArrayList,User對(duì)象已經(jīng)正常轉(zhuǎn)化類型為User,User對(duì)象屬性也是對(duì)的。

最后

給出完整demo代碼

Test.javapackage?com.weizhixi.test;

import?com.alibaba.fastjson.JSONArray;

import?com.google.common.reflect.TypeToken;

import?java.lang.reflect.Type;

import?java.util.ArrayList;

import?java.util.List;

/**

*?Created?by?cxq?on?2017-11-27.

*/

public?class?Test?{

public?static?void?main(String[]?arg0){

//泛型類型

TypeToken?typeToken?=?new?TypeToken>>(){};

Type?type?=?typeToken.getType();

//模擬數(shù)據(jù)列表

List>?list?=?new?ArrayList>();

list.add(new?User(1,"hello"));

list.add(new?User(2,"world"));

String?json?=?JSONArray.toJSONString(list);

System.out.println(json);

//輸出:[{"id":1,"name":"hello"},{"id":2,"name":"world"}]

//我們來看看不使用TypeToken的情況

List>?result1?=?JSONArray.parseObject(json,?list.getClass());

System.out.println(result1);

//輸出:[{"id":1,"name":"hello"},?{"id":2,"name":"world"}]

//再來看看使用TypeToken的情況

List>?result2?=?JSONArray.parseObject(json,?type);

System.out.println(result2);

System.out.println(result2.get(0).getName().getClass());

//輸出:[com.weizhixi.test.User@db8155,?com.weizhixi.test.User@107f7fe]

//輸出:class?java.lang.String

}

}

User.javapackage?com.weizhixi.test;

/**

*?Created?by?cxq?on?2017-11-27.

*/

public?class?User{

private?Integer?id;

private?T?name;

public?User(){

}

public?User(Integer?id,?T?name){

this.id?=?id;

this.name?=?name;

}

public?Integer?getId()?{

return?id;

}

public?void?setId(Integer?id)?{

this.id?=?id;

}

public?T?getName()?{

return?name;

}

public?void?setName(T?name)?{

this.name?=?name;

}

}

本例子需使用的jar包有:

fastjson-1.1.41.jar

guava-16.0.1.jar

com.google.guava

guava

16.0.1

com.alibaba

fastjson

1.1.41

獲取泛型的類型例子.zip

5060f40b6ca00d5c42c03c26533a581d

已下載:20 次

原創(chuàng)文章,轉(zhuǎn)載請(qǐng)注明出處:https://www.weizhixi.com/article/7.html

總結(jié)

以上是生活随笔為你收集整理的java 获取泛型的type,如何获取泛型的Type类型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。