国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Spring 中優雅的獲取泛型信息

Aldous / 1332人閱讀

摘要:今天我要分享的是在中優雅的獲取泛型。通過反射獲得定義中聲明的父類的泛型參數的類型注意泛型必須定義在父類處這是唯一可以通過反射從泛型獲得實例的地方如無法找到返回如工具從開始中添加了工具,這個類可以更加方便的用來回去泛型信息。

簡介

Spring 源碼是個大寶庫,我們能遇到的大部分工具在源碼里都能找到,所以筆者開源的 mica 完全基于 Spring 進行基礎增強,不重復造輪子。今天我要分享的是在 Spring 中優雅的獲取泛型。

獲取泛型 自己解析

我們之前的處理方式,代碼來源 vjtools(江南白衣)。

/**
 * 通過反射, 獲得Class定義中聲明的父類的泛型參數的類型.
 * 
 * 注意泛型必須定義在父類處. 這是唯一可以通過反射從泛型獲得Class實例的地方.
 * 
 * 如無法找到, 返回Object.class.
 * 
 * 如public UserDao extends HibernateDao
 * 
 * @param clazz clazz The class to introspect
 * @param index the Index of the generic declaration, start from 0.
 * @return the index generic declaration, or Object.class if cannot be determined
 */
public static Class getClassGenericType(final Class clazz, final int index) {

    Type genType = clazz.getGenericSuperclass();

    if (!(genType instanceof ParameterizedType)) {
        logger.warn(clazz.getSimpleName() + ""s superclass not ParameterizedType");
        return Object.class;
    }

    Type[] params = ((ParameterizedType) genType).getActualTypeArguments();

    if ((index >= params.length) || (index < 0)) {
        logger.warn("Index: " + index + ", Size of " + clazz.getSimpleName() + ""s Parameterized Type: "
                + params.length);
        return Object.class;
    }
    if (!(params[index] instanceof Class)) {
        logger.warn(clazz.getSimpleName() + " not set the actual class on superclass generic parameter");
        return Object.class;
    }

    return (Class) params[index];
}
ResolvableType 工具

從 Spring 4.0 開始 Spring 中添加了 ResolvableType 工具,這個類可以更加方便的用來回去泛型信息。
首先我們來看看官方示例:

private HashMap> myMap;

public void example() {
    ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));
    t.getSuperType(); // AbstractMap>
    t.asMap(); // Map>
    t.getGeneric(0).resolve(); // Integer
    t.getGeneric(1).resolve(); // List
    t.getGeneric(1); // List
    t.resolveGeneric(1, 0); // String
}
詳細說明 構造獲取 Field 的泛型信息
ResolvableType.forField(Field)
構造獲取 Method 的泛型信息
ResolvableType.forMethodParameter(Method, int)
構造獲取方法返回參數的泛型信息
ResolvableType.forMethodReturnType(Method)
構造獲取構造參數的泛型信息
ResolvableType.forConstructorParameter(Constructor, int)
構造獲取類的泛型信息
ResolvableType.forClass(Class)
構造獲取類型的泛型信息
ResolvableType.forType(Type)
構造獲取實例的泛型信息
ResolvableType.forInstance(Object)

更多使用 Api 請查看,ResolvableType java doc: https://docs.spring.io/spring...

開源推薦

Spring boot 微服務高效開發?mica?工具集:https://gitee.com/596392912/mica

Avue?一款基于vue可配置化的神奇框架:https://gitee.com/smallweigit/avue

pig?宇宙最強微服務(架構師必備):https://gitee.com/log4j/pig

SpringBlade?完整的線上解決方案(企業開發必備):https://gitee.com/smallc/SpringBlade

IJPay 支付SDK讓支付觸手可及:https://gitee.com/javen205/IJPay

加入【如夢技術】Spring QQ群:479710041,了解更多。

關注我們

掃描上面二維碼,更多精彩內容每天推薦!

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/73957.html

相關文章

  • 第12章 元編程與注解、反射 《Kotlin 項目實戰開發》

    摘要:第章元編程與注解反射反射是在運行時獲取類的函數方法屬性父類接口注解元數據泛型信息等類的內部信息的機制。本章介紹中的注解與反射編程的相關內容。元編程本質上是一種對源代碼本身進行高層次抽象的編碼技術。反射是促進元編程的一種很有價值的語言特性。 第12章 元編程與注解、反射 反射(Reflection)是在運行時獲取類的函數(方法)、屬性、父類、接口、注解元數據、泛型信息等類的內部信息的機...

    joyqi 評論0 收藏0
  • Spring Boot crud如何優雅實現-附代碼

    摘要:以下內容基于如果你使用的也是相同的技術棧可以繼續往下閱讀,如果不是可以當作參考。編寫的四種方式裸寫最簡單最粗暴也是使用最多的一種方式,在寫的多了之后可以用生成工具生成。 導讀 在目前接觸過的項目中大多數的項目都會涉及到: crud相關的操作, 哪如何優雅的編寫crud操作呢?帶著這個問題,我們發現項目中大量的操作多是 創建實體 、刪除實例、 修改實體、 查詢單個實體、 分頁查詢多個實體...

    wing324 評論0 收藏0
  • Java Optional 實踐

    摘要:實踐很簡單的一個類,點開它的源代碼,其中所有的方法都是與相關聯的。從而很好地避免了空指針異常。方法,如果存在,返回包含的值,否則拋出異常。隨便點開一個方法,都會在第一行為不該為的參數進行判斷。 問題描述 在大熱的Spring Boot 2.0中,在將原來的泛型改為了Optional,旨在讓我們的代碼更簡潔。 showImg(https://segmentfault.com/img/bV...

    jaysun 評論0 收藏0
  • 《java編程思想》—— 泛型

    摘要:引用泛型除了方法因不能使用外部實例參數外,其他繼承實現成員變量,成員方法,方法返回值等都可使用。因此,生成的字節碼僅包含普通的類,接口和方法。 為什么要使用泛型程序設計? 一般的類和方法,只能使用具體的類型:要么是基本類型,要么是自定義類的對應類型;如果要編寫可以應用于多種類型的代碼,這種刻板的限制對代碼的束縛就會很大。----摘自原書Ordinary classes and meth...

    CODING 評論0 收藏0
  • Java 反射

    摘要:反射的使用通過反射獲取構造方法并使用首先我們聲明一個類方便我們進行介紹默認的構造方法默認的構造方法無參構造方法調用了公有無參構造方法執行了。。。 1.概述 1.1 什么是反射 java反射機制是指在運行狀態中,對于任意一個類,都能夠知道這個類的所有屬性和方法,對于任意一個對象,都能調用它的任意一個方法和屬性,這種動態獲取的信息以及動態調用對象的方法的功能稱為java語言的反射機制。 1...

    nodejh 評論0 收藏0

發表評論

0條評論

Aldous

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<