最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中TypeReference用法詳情說明

 更新時間:2022年07月21日 11:43:47   作者:技術老鳥  
這篇文章主要介紹了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用法詳情說明的文章就介紹到這了,更多相關Java TypeReference用法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 只需兩步實現Eclipse+Maven快速構建第一個Spring Boot項目

    只需兩步實現Eclipse+Maven快速構建第一個Spring Boot項目

    這篇文章主要介紹了只需兩步實現Eclipse+Maven快速構建第一個Spring Boot項目,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Okhttp實現上傳文件+參數請求接口form-data

    使用Okhttp實現上傳文件+參數請求接口form-data

    在進行接口對接時,常遇到需要傳遞多種類型參數及文件上傳的情況,解決此問題的關鍵在于參數傳遞和文件上傳的正確處理,在Service層和Controller層的傳參,可以通過@RequestParam標注或直接使用請求實體類,但若結合文件上傳,則不應使用@RequestBody注解
    2024-10-10
  • Intellj Idea中的maven工程Java文件顏色不對,未被識別的解決

    Intellj Idea中的maven工程Java文件顏色不對,未被識別的解決

    這篇文章主要介紹了Intellj Idea中的maven工程Java文件顏色不對,未被識別的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • BeanUtils.copyProperties復制不生效的解決

    BeanUtils.copyProperties復制不生效的解決

    這篇文章主要介紹了BeanUtils.copyProperties復制不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • maven子模塊相互依賴打包時報錯找不到類的解決方案

    maven子模塊相互依賴打包時報錯找不到類的解決方案

    本文主要介紹了maven子模塊相互依賴打包時報錯找不到類的解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-06-06
  • SpringBoot使用POI進行Excel下載

    SpringBoot使用POI進行Excel下載

    這篇文章主要為大家詳細介紹了SpringBoot使用POI進行Excel下載,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-09-09
  • SpringCloud添加客戶端Eureka Client過程解析

    SpringCloud添加客戶端Eureka Client過程解析

    這篇文章主要介紹了SpringCloud添加客戶端Eureka Client過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • Spring Boot Web應用開發(fā) CORS 跨域請求支持

    Spring Boot Web應用開發(fā) CORS 跨域請求支持

    本篇文章主要介紹了Spring Boot Web應用開發(fā) CORS 跨域請求支持,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • java正則表達式對特殊字符的轉義以及異?,F象

    java正則表達式對特殊字符的轉義以及異?,F象

    這篇文章主要給大家介紹了關于java正則表達式對特殊字符的轉義以及異?,F象的相關資料,在Java中使用正則表達式匹配特殊字符也需要使用轉義字符"\",需要的朋友可以參考下
    2023-06-06
  • JPA實現多條件分頁查詢

    JPA實現多條件分頁查詢

    這篇文章主要介紹了JPA實現多條件分頁查詢方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-07-07

最新評論

阿坝县| 弥勒县| 鹿邑县| 久治县| 通海县| 株洲市| 沭阳县| 青海省| 衢州市| 项城市| 商洛市| 三明市| 西城区| 板桥市| 新邵县| 平湖市| 大足县| 温州市| 中方县| 叶城县| 措美县| 中山市| 华安县| 镇江市| 白银市| 新绛县| 个旧市| 寻甸| 英德市| 特克斯县| 资中县| 波密县| 英德市| 游戏| 桃源县| 沽源县| 昌乐县| 伊金霍洛旗| 上栗县| 华蓥市| 刚察县|