日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java泛型程序设计——反射和泛型

發布時間:2023/12/3 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java泛型程序设计——反射和泛型 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【0】README

0.1) 本文描述+源代碼均 轉自 core java volume 1, 旨在理解 java泛型程序設計 的 反射和泛型 的相關知識;


【1】反射和泛型相關

1.1)現在, Class類是泛型的, 如 String.class 實際上是一個 Class 類的對象(事實上, 是唯一的對象);
1.2)類型參數十分有用, 因為它允許Class 方法的返回類型更加具有針對性。

  • 1.2.1)下面的Class 中的方法就使用了類型參數:

對上述語句的分析(Analysis):

  • A1)newInstance 方法: 它返回一個實例, 這個實例所屬的類由默認的 構造器獲得, 它的返回類型目前被聲明為 T, 其類型與 Class 描述的類相同, 這樣就免除了類型轉換;
  • A2)如果給定的類型確實是T的一個子類型, cast 方法就會返回一個 現在聲明為 類型T的對象, 否則, 拋出一個 BadCastException 異常;
  • A3)如果這個類不是 enum 類或類型T 的枚舉值的數組, getEnumConstants 方法將返回 null;
  • A4)最后, getConstructor 與 getDeclaredConstructor 方法返回一個 Constructor 對象。 Construtor 類也已經變成 泛型, 以便 newInstance 方法有一個正確的 返回類型;

【2】使用 Class 參數進行類型匹配

2.1)有時, 匹配泛型方法中的Class 參數的類型變量很有使用價值。 看個荔枝(據說比較權威)

public static <T> Pair<T> makePair(Class<T> c) throws InstantiationException , IllegalAccessException {return new Pair<>(c.newInstance (), c.newInstance()); }
  • 2.1.1)如果調用 makePair(Employee.class)
  • 2.1.2)Employee.class 是類型 Class< Employee> 的一個對象。 makePair 方法的類型參數T 同 Employee 匹配, 并且編譯器可以推斷出這個方法將返回一個 Pair< Employee>;

【3】虛擬機中的泛型類型消息

3.1)java泛型的卓越特性之一是在虛擬機中 泛型類型的擦除;

  • 3.1.1)如 原始的 Pair類知道源于泛型類 Pair< T> , 即使一個 Pair類型的對象無法區分是由 Pair< String> 構造的還是由 Pair< Employee> 構造的;
  • 3.1.2)類似的, 看一下方法
public static Comparable min(Comparable[] a) , 這是一個方法的擦除 public static <T extends Comparable<? super T>> T min(T[] a);

3.2)可以用反射API類確定:

  • 3.2.1)這個泛型方法有一個叫做T的類型參數;
  • 3.2.2)這個類型參數有一個子類型限定, 其自身又是一個泛型類型;
  • 3.2.3)這個限定類型有一個通配符參數;
  • 3.2.4)這個通配符參數有一個 超類型限定;
  • 3.2.5)這個泛型方法有一個泛型數組參數;

Conclusion) 一句話, 需要重新構造實現者聲明的泛型類以及方法中的所有內容。 但是, 不會知道對于特定的對象或方法調用,如何解釋類型參數;
3.3) 為了表達泛型類型聲明, java SE 5.0 在 java.lang.reflect 包中提供了一個新的接口 Type, 該接口有如下子類:

  • 3.3.1)Class 類:描述具體類型;
  • 3.3.2)TypeVariable接口: 描述類型變量(如 T extends Comparable< ? super T>);
  • 3.3.3)WildcardType接口:描述通配符(如? super T);
  • 3.3.4)ParameterizedType 接口:描述泛型類或接口類型;(如 Comparable< ? super T>);
  • 3.3.5)GenericArrayType 接口: 描述泛型數組(如 T[]);

3.4)看個荔枝:(使用 泛型反射API 打印出給定類的有關內容), 如果用Pair類運行, 將會得到如下報告:

Attention)源代碼參見: https://github.com/pacosonTang/core-java-volume/blob/master/chapter12/GenericReflectionTest.java

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的java泛型程序设计——反射和泛型的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。