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

Java源碼解析之TypeVariable詳解

 更新時間:2017年10月26日 10:40:03   作者:青樓有罪  
這篇文章主要介紹了Java源碼解析之TypeVariable詳解,具有一定參考價值,需要的朋友可以了解下。

TypeVariable,類型變量,描述類型,表示泛指任意或相關(guān)一類類型,也可以說狹義上的泛型(泛指某一類類型),一般用大寫字母作為變量,比如K、V、E等。

源碼

public interface TypeVariable<D extends GenericDeclaration> extends Type {
  //獲得泛型的上限,若未明確聲明上邊界則默認為Object
  Type[] getBounds();
  //獲取聲明該類型變量實體(即獲得類、方法或構(gòu)造器名)
  D getGenericDeclaration();
  //獲得名稱,即K、V、E之類名稱
  String getName();
}

概述

  說到TypeVariable<D>就不得不提起java泛型中另一個比較重要的接口對象,GenericDeclaration接口對象。該接口用來定義哪些對象上是可以聲明(定義)范型變量,所謂范型變量就是<E extends List>或者<E>, 也就是TypeVariable<D>這個接口的對應(yīng)的對象,TypeVariable<D>中的D是extends GenericDeclaration的,用來通過范型變量反向獲取擁有這個變量的GenericDeclaration。

  目前實現(xiàn)GenericDeclaration接口的類包括Class, Method, Constructor,也就是說只能在這幾種對象上進行范型變量的聲明(定義)。GenericDeclaration的接口方法getTypeParameters用來逐個獲取該GenericDeclaration的范型變量聲明。詳情可查看:Java源碼解析之GenericDeclaration詳解

  類型變量的聲明(定義):<E>,前后需加上尖括號

//1.在類(Class)上聲明(定義)類型變量
class A<T>{
  T a;
}//之后這里可用任意類型替換T,例如
A<String> as = new A<String>();
//是否看著有點像集合?不錯,集合就是泛型的一個典型運用
//2.在方法上聲明(定義)
public <E> void test(E e){}
//方法上,類型變量聲明(定義)不是在參數(shù)里邊,而且必須在返回值之前,static等修飾后
//3.聲明(定義)在構(gòu)造器上
public <K> A(K k){}

【注意】類型變量聲明(定義)的時候不能有下限(既不能有super),否則編譯報錯。為什么?T extends classA表示泛型有上限classA,當然可以,因為這樣,每一個傳進來的類型必定是classA(具有classA的一切屬性和方法),但若是T super classA,傳進來的類型不一定具有classA的屬性和方法,當然就不適用于泛型,說的具體點:

//假設(shè)
class A<T super classA>{
  T t;
  public void test(){
    //這個時候你不能用t干任何事,因為你不確定t具有哪些屬性和方法
    //當然,t肯定是有Object方法的,但沒意義
  }
}

源碼詳解

1.getBounds

  獲得該類型變量的上限(上邊界),若無顯式定義(extends),默認為Object,類型變量的上限可能不止一個,因為可以用&符號限定多個(這其中有且只能有一個為類或抽象類,且必須放在extends后的第一個,即若有多個上邊界,則第一個&后必為接口)。

class A<K extends classA & interfaceB, V>{
  K key;
  V value;
  public static void main(String[] args) throws Exception
  {
    Type[] types = Main.class.getTypeParameters();
    for(Type type : types){
      TypeVariable t = (TypeVariable)type;
      System.out.println(t.getGenericDeclaration());
      int size = t.getBounds().length;
      System.out.println(t.getBounds()[size - 1]);
      System.out.println(t.getName() + "\n-------------分割線-------------");
    }
  }
}
//輸出結(jié)果
class com.fcc.test.Main
interface com.fcc.test.interfaceB
K
-------------分割線-------------
class com.fcc.test.Main
class java.lang.Object
V
-------------分割線-------------

2.getGenericDeclaration

  獲得聲明(定義)這個類型變量的類型及名稱,即如:

class com.xxx.xxx.classA 或
public void com.fcc.test.Main.test(java.util.List) 或
public com.fcc.test.Main()

Constructor constructor = Main.class.getConstructor();
TypeVariable typeVariable = constructor.getTypeParameters()[0];
System.out.println(typeVariable.getGenericDeclaration());
//獲得方法中聲明(定義)的類型變量與上面類似

3.getName

  獲得這個類型變量在聲明(定義)時候的名稱

總結(jié)

以上就是本文關(guān)于Java源碼解析之TypeVariable詳解的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站:Java源碼解析之object類、java.lang.Void類源碼解析等,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • idea安裝與配置及基本用法教程詳解

    idea安裝與配置及基本用法教程詳解

    這篇文章主要介紹了idea安裝與配置及基本用法教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案

    Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案

    這篇文章主要介紹了Spring注解配置AOP導(dǎo)致通知執(zhí)行順序紊亂解決方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-10-10
  • 教你使用Java實現(xiàn)掃雷小游戲(最新完整版)

    教你使用Java實現(xiàn)掃雷小游戲(最新完整版)

    本文給大家介紹使用Java實現(xiàn)掃雷小游戲,本程序封裝了五個類,分別是主類GameWin類,繪制底層地圖和繪制頂層地圖的類MapBottom類和MapTop類,繪制底層數(shù)字的類BottomNum類,以及初始化地雷的BottomRay類和工具GameUtil類,用于存靜態(tài)參數(shù)和方法,感興趣的朋友一起看看吧
    2022-05-05
  • 解讀Spring配置文件中的property標簽中的屬性

    解讀Spring配置文件中的property標簽中的屬性

    這篇文章主要介紹了Spring配置文件中的property標簽中的屬性,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • JAVA調(diào)用JavaScript方法代碼示例

    JAVA調(diào)用JavaScript方法代碼示例

    之前在一次機緣巧合的情況下,需要時用JAVA執(zhí)行js方法,查閱了一些文檔,找到了相關(guān)解決方法,這里和大家分享一下,這篇文章主要給大家介紹了關(guān)于JAVA調(diào)用JavaScript方法的相關(guān)資料,需要的朋友可以參考下
    2023-09-09
  • SpringSecurity6.4中一次性令牌登錄(One-Time Token Login)實現(xiàn)

    SpringSecurity6.4中一次性令牌登錄(One-Time Token Login)實現(xiàn)

    Spring Security為一次性令牌認證提供了支持,本文就來介紹一下SpringSecurity6.4中一次性令牌登錄(One-Time Token Login)實現(xiàn),具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • JavaWeb工程中集成YMP框架快速上手(二)

    JavaWeb工程中集成YMP框架快速上手(二)

    YMP是一個非常簡單、易用的一套輕量級JAVA應(yīng)用開發(fā)框架,設(shè)計原則主要側(cè)重于簡化工作任務(wù)、規(guī)范開發(fā)流程、提高開發(fā)效率。對YMP框架感興趣的小伙伴們可以參考一下
    2016-02-02
  • Java AOP知識詳細介紹

    Java AOP知識詳細介紹

    這篇文章主要介紹了Java AOP知識詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • Java Grpc實例創(chuàng)建負載均衡詳解

    Java Grpc實例創(chuàng)建負載均衡詳解

    這篇文章主要介紹了Java Grpc實例創(chuàng)建負載均衡詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 使用JAR包中MANIFEST.MF的注意事項

    使用JAR包中MANIFEST.MF的注意事項

    這篇文章主要介紹了使用JAR包中MANIFEST.MF的注意事項,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-07-07

最新評論

车险| 阳新县| 象州县| 靖远县| 兰溪市| 温州市| 沽源县| 绥化市| 巴东县| 长岭县| 曲沃县| 精河县| 阆中市| 中江县| 金阳县| 洛浦县| 镇坪县| 油尖旺区| 社旗县| 太康县| 昌江| 平乡县| 哈尔滨市| 县级市| 南投市| 中阳县| 西青区| 天气| 军事| 青州市| 赤峰市| 马关县| 乐山市| 重庆市| 巴塘县| 志丹县| 巫溪县| 涡阳县| 沧源| 黔西| 六安市|