簡體   English   中英

什么代表反射TypeVariable接口

[英]What represents reflection TypeVariable interface

我正在嘗試閱讀和理解java反射機制使用的不同接口和類,但我不明白真正代表實現TypeVariable接口的類的實例是什么?

此外, 官方文檔中的以下引文也很模糊:

如果類型變量t由類型(即類,接口或注釋類型)T引用,並且T由第n個封閉類T(參見JLS 8.1.2)聲明,那么創建t需要解析(參見第i個封閉類T的JVMS 5),其中i = 0到n,包括0和n。 創建類型變量不得導致其邊界的創建。

任何人都可以給我一個小例子,清楚地解釋一下上段的含義是什么?

提前致謝。

它表示方法,構造函數或類型聲明的類型變量,即以下代碼段中的T

public static <T> void f(){}

class A<T> {}

interface I<T> {}

class B {
    <T>B() {
    }
}

請注意,這與類型使用不同,例如, Integer不是以下代碼段中的類型變量:

List<Integer> list = Arrays.<Integer>asList(null);

類型變量的使用不由此表示:

public static <T> void h(T t) {}
                         ^
                     Not a TypeVariable

以下是標准API中類的使用列表: https//docs.oracle.com/javase/8/docs/api/java/lang/reflect/class-use/TypeVariable.html


ParametrizedType區別:

TypeVariable是指類型變量的聲明, ParametrizedType是這種類型的使用。

例:

public class ReflectTest {

    public Collection<String> c;

    public static void main(String[] args) throws NoSuchFieldException {
        System.out.println(Collection.class.getTypeParameters()[0]); // E
        System.out.println(Collection.class.getTypeParameters()[0] instanceof TypeVariable); // true
        System.out.println(Collection.class.getTypeParameters()[0] instanceof ParameterizedType); // false
        Field field = ReflectTest.class.getField("c");
        System.out.println(field.getGenericType()); // java.util.Collection<java.lang.String>
        System.out.println(field.getGenericType() instanceof TypeVariable); // false
        System.out.println(field.getGenericType() instanceof ParameterizedType); // true
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM