91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中TypeReference怎么使用

發布時間:2022-07-22 10:11:55 來源:億速云 閱讀:183 作者:iii 欄目:開發技術

本篇內容主要講解“Java中TypeReference怎么使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Java中TypeReference怎么使用”吧!

在使用fastJson時,對于泛型的反序列化很多場景下都會使用到TypeReference,例如:

void testTypeReference() {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(9);
list.add(4);
list.add(8);
JSONObject jsonObj = new JSONObject();
jsonObj.put("a", list);
System.out.println(jsonObj);

List<String> list2 = jsonObj.getObject("a", new TypeReference<List<Integer>>(){});

System.out.println(list2);
}
//輸出

1{"a":[1,9,4,8]}
2[1, 9, 4, 8]
{"msg":"","code":"0","data":[{"adjEq":"","details":[],"imr":"","isoEq":"","mgnRatio":"","mmr":"","notionalUsd":"","ordFroz":"","totalEq":"0","uTime":"1658332171773"}]}
//拿code的值
        String result1 = JSON.toJSONString(result);
        System.out.println("result1=="+result1);

        Result result2 = JSON.parseObject(result1, new TypeReference<Result>() {});
        System.out.println(result2.getCode());
//拿data的值   Balance是data中數據的實體類
		Result<List<Balance>> listResult = JSON.parseObject(result1, new TypeReference<Result<List<Balance>>>() {});
        System.out.println("result2=="+listResult.getData());

使用TypeReference可以明確的指定反序列化的類型,具體實現邏輯參考TypeReference的構造函數

protected TypeReference(){
Type superClass = getClass().getGenericSuperclass();

Type type = ((ParameterizedType) superClass).getActualTypeArguments()[0];

Type cachedType = classTypeCache.get(type);
if (cachedType == null) {
classTypeCache.putIfAbsent(type, type);
cachedType = classTypeCache.get(type);
}

this.type = cachedType;
}

解說:

其中核心的方法是:getActualTypeArguments,它可以得到父類的反省類型

ParameterizedType是一個記錄類型泛型的接口, 繼承自Type,一共三方法:

Type[] getActualTypeArguments(); //返回泛型類型數組
Type getRawType(); //返回原始類型Type
Type getOwnerType(); //返回 Type 對象,表示此類型是其成員之一的類型。

例如 Map<String,String> 對應的ParameterizedType三個方法分別取值如下:

[class java.lang.String, class java.lang.String]
interface java.util.Map
null

例證:

package JsonLearn;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

public class TypeReferencBaseLearn {
public static class IntMap extends HashMap<String, Integer> {}

void test1() {
IntMap intMap = new IntMap();
System.out.println(“getSuperclass:” + intMap.getClass().getSuperclass());
System.out.println(“getGenericSuperclass:” + intMap.getClass().getGenericSuperclass());
Type type = intMap.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType p = (ParameterizedType)type;
for (Type t : p.getActualTypeArguments()) {
System.out.println(t);
}
}
}

void test2() {
Map<String, Integer> intMap = new HashMap<>();
System.out.println(“\ngetSuperclass:” + intMap.getClass().getSuperclass());
System.out.println(“getGenericSuperclass:” + intMap.getClass().getGenericSuperclass());
Type type = intMap.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType p = (ParameterizedType)type;
for (Type t : p.getActualTypeArguments()) {
System.out.println(t);
}
}
}
void test3() {
Map<String, Integer> intMap = new HashMap<String, Integer>(){};
System.out.println(“\ngetSuperclass:” + intMap.getClass().getSuperclass());
System.out.println(“getGenericSuperclass:” + intMap.getClass().getGenericSuperclass());
Type type = intMap.getClass().getGenericSuperclass();
if (type instanceof ParameterizedType) {
ParameterizedType p = (ParameterizedType)type;
for (Type t : p.getActualTypeArguments()) {
System.out.println(t);
}
}
}
public static void main(String[] args) {
TypeReferencBaseLearn obj = new TypeReferencBaseLearn();
obj.test1();
obj.test2();
obj.test3();
}
}

輸出:

getSuperclass:class java.util.HashMap
getGenericSuperclass:java.util.HashMap<java.lang.String, java.lang.Integer>
class java.lang.String
class java.lang.Integer

getSuperclass:class java.util.AbstractMap
getGenericSuperclass:java.util.AbstractMap<K, V>
K
V

getSuperclass:class java.util.HashMap
getGenericSuperclass:java.util.HashMap<java.lang.String, java.lang.Integer>
class java.lang.String
class java.lang.Integer

到此,相信大家對“Java中TypeReference怎么使用”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平南县| 安康市| 翁牛特旗| 区。| 通州市| 镇宁| 内丘县| 宁化县| 明溪县| 阳谷县| 通州市| 花莲县| 双峰县| 城市| 中西区| 梅州市| 崇礼县| 古蔺县| 高密市| 垣曲县| 锡林浩特市| 武鸣县| 酉阳| 江华| 孙吴县| 保康县| 梓潼县| 阳山县| 万山特区| 红河县| 若尔盖县| 伊金霍洛旗| 勃利县| 饶阳县| 聂荣县| 阳东县| 公主岭市| 精河县| 都江堰市| 双辽市| 嵩明县|