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

Spring 中優(yōu)雅的獲取泛型信息的方法

 更新時間:2019年03月27日 11:41:14   作者:如夢技術  
這篇文章主要介紹了Spring 中優(yōu)雅的獲取泛型信息的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

簡介

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

獲取泛型

自己解析

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

/**
 * 通過反射, 獲得Class定義中聲明的父類的泛型參數的類型.
 * 
 * 注意泛型必須定義在父類處. 這是唯一可以通過反射從泛型獲得Class實例的地方.
 * 
 * 如無法找到, 返回Object.class.
 * 
 * 如public UserDao extends HibernateDao<User,Long>
 * 
 * @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<Integer, List<String>> myMap;

public void example() {
  ResolvableType t = ResolvableType.forField(getClass().getDeclaredField("myMap"));
  t.getSuperType(); // AbstractMap<Integer, List<String>>
  t.asMap(); // Map<Integer, List<String>>
  t.getGeneric(0).resolve(); // Integer
  t.getGeneric(1).resolve(); // List
  t.getGeneric(1); // List<String>
  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-framework/docs/current/javadoc-api/org/springframework/core/ResolvableType.html

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java中父類怎么調用子類的方法

    Java中父類怎么調用子類的方法

    這篇文章主要介紹了Java父類調用子類的方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-04-04
  • springboot 設置server.port不生效的原因及解決

    springboot 設置server.port不生效的原因及解決

    這篇文章主要介紹了springboot 設置server.port不生效的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • Java異步非阻塞編程的幾種方式總結

    Java異步非阻塞編程的幾種方式總結

    這篇文章主要介紹了Java異步非阻塞編程的幾種方式總結,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Mybatis-plus 批量插入太慢的問題解決(提升插入性能)

    Mybatis-plus 批量插入太慢的問題解決(提升插入性能)

    公司使用的Mybatis-Plus操作SQL,用過Mybatis-Plus的小伙伴一定知道他有很多API提供給我們使用,但是批量插入大數據太慢應該怎么解決,本文就詳細的介紹一下,感興趣的可以了解一下
    2021-11-11
  • Java中線程狀態(tài)+線程安全問題+synchronized的用法詳解

    Java中線程狀態(tài)+線程安全問題+synchronized的用法詳解

    這篇文章主要介紹了Java中線程狀態(tài)+線程安全問題+synchronized的用法詳解,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-04-04
  • Java中的適配器原理解析

    Java中的適配器原理解析

    這篇文章主要介紹了Java中的適配器原理解析,當實現(xiàn)接口時,為了使所用的類中只實現(xiàn)需要的方法,使代碼更加簡潔,可以定義一個抽象類實現(xiàn)接口,將所需要的方法定義為 抽象方法,然后讓類繼承此抽象方法即可,需要的朋友可以參考下
    2023-11-11
  • java并發(fā)編程中的SynchronousQueue實現(xiàn)原理解析

    java并發(fā)編程中的SynchronousQueue實現(xiàn)原理解析

    這篇文章主要介紹了java并發(fā)編程中的SynchronousQueue實現(xiàn)原理解析,SynchronousQueue是一個比較特別的隊列,此隊列源碼中充斥著大量的CAS語句,理解起來是有些難度的,為了方便日后回顧,本篇文章會以簡潔的圖形化方式展示該隊列底層的實現(xiàn)原理,需要的朋友可以參考下
    2023-12-12
  • java實現(xiàn)點擊按鈕事件彈出子窗口

    java實現(xiàn)點擊按鈕事件彈出子窗口

    這篇文章主要為大家詳細介紹了java實現(xiàn)點擊按鈕事件彈出子窗口,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • SpringCloud超詳細講解Feign聲明式服務調用

    SpringCloud超詳細講解Feign聲明式服務調用

    Feign可以把Rest的請求進行隱藏,偽裝成類似Spring?MVC的Controller一樣。不用再自己拼接url,拼接參數等等操作,一切都交給Feign去做
    2022-06-06

最新評論

丰宁| 兴宁市| 大邑县| 盘锦市| 乌拉特前旗| 平顶山市| 江门市| 车险| 勐海县| 宁河县| 大同县| 宁晋县| 安化县| 额敏县| 新田县| 监利县| 乌苏市| 百色市| 郓城县| 海阳市| 隆子县| 射洪县| 兴山县| 五峰| 客服| 绥滨县| 莱阳市| 九寨沟县| 龙陵县| 卓资县| 临安市| 珲春市| 昌乐县| 枣庄市| 金川县| 赫章县| 平武县| 明星| 江山市| 云南省| 涞水县|