Type Java類型


參考:https://blog.csdn.net/a327369238/article/details/52621043

Type —— Java類型
  Type是一個空接口,所有類型的公共接口(父接口),其意義表示Java所有類型,這里所謂的類型是從Java整個語言角度來看的,比如原始類型、參數化類型(泛型)、類型變量及其數組等,可以理解為,Class(類)是Java對現實對象的抽象,而Type是對Java語言對象的抽象。

Type的子孫
概述
  注意區分類型(Type)與類(Class)的區別,這里Class是Type的一種,而像數組、枚舉等“類型”是相對於Class來說。

    @org.junit.Test
    public void test5() throws NoSuchMethodException {
        String[] s=new String[]{"1"};
        Class<? extends String[]> aClass1 = s.getClass();
        if (String[].class.isAssignableFrom(aClass1)){
            System.out.println(11111);
        }
        Class<? extends DeleteFlagEnum> aClass2 = DeleteFlagEnum.DELETE.getClass();
        if (Enum.class.isAssignableFrom(aClass2)){
            System.out.println(2222);
        }
        //從下面方法可以看出,具體的枚舉類,是Enum的子類
        //DeleteFlagEnum的父類是Enum
        s.getClass().isEnum();
    }

 

 

Type的直接子接口
1.ParameterizedType: 表示一種參數化的類型,比如Collection,即普通的泛型。
2.TypeVariable:是各種類型變量的公共父接口,就是泛型里面的類似T、E。
3.GenericArrayType:表示一種元素類型是參數化類型或者類型變量的數組類型,比如List<>[],T[]這種。
4.WildcardType:代表一種通配符類型表達式,類似? super T這樣的通配符表達式。

Type的直接子類
  Type的直接子類只有一個,也就是Class,代表着類型中的原始類型以及基本類型。關於Class詳見:Class —— 反射基石。

Type子接口解析
1.ParameterizedType
  參數化類型,即泛型,類似List<T>、Map<Integer, String>、List<? extends Number>帶有類型參數的類型,當然,也可以是自定義的,再調用getRawType()與getActualTypeArguments()兩個方法,就可以得到聲明此參數化類型的類(java.lang.Comparable)和實際的類型參數數組([? super T]),而這個? super T又是一個WildcardType類型。
ParameterizedType詳見:Java類型之參數化類型。

2.TypeVariable
  類型變量,如參數化類型中的E、K等類型變量,表示泛指任何類,如果加上extends/super限定,則就會有相應的上限、下限。
TypeVariable詳見:Java類型之類型變量。

3.GenericArrayType
  泛型數組,表示上面兩種的數組類型,即形如:A<T>[],T[][]類型。
GenericArrayType詳見:Java類型之泛型數組。

4.WildcardType
  通配符表達式,或泛型表達式,它雖然是Type的一個子接口,但並不是Java類型中的一種,表示的僅僅是類似 ? extends T、? super K這樣的通配符表達式。
WildcardType詳見:Java類型之泛型表達式。

Java類型分類
Java的所有類型包括:
1. raw type:原始類型,對應Class
2. parameterized types:參數化類型,對應ParameterizedType
3. array types:數組類型,對應GenericArrayType
4. type variables:類型變量,對應TypeVariable
5. primitive types:基本類型,仍然對應Class
1). 1中的Class,不僅僅指平常所指的類,還包括數組、接口、注解、枚舉等結構。
2). 3中的數組類型GenericArrayType,應該指的是2、4類型數組,而不是一般我們說的數組,我們一般所說的數組是指1、5類型數組,他們還是1,也就是Class類型。
3). List<T ? entends>[]:這里的List就是ParameterizedType,T就是TypeVariable,T ? entends就是WildcardType(注意,WildcardType不是Java類型,而是一個表達式),整個List<T ? entends>[]就是GenericArrayType。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM