反射之Type類

原文連接http://zhhll.icu/2020/08/17/java%E5%9F%BA%E7%A1%80/%E5%8F%8D%E5%B0%84/%E5%8F%8D%E5%B0%84%E4%B9%8BType/java

Type類

Type接口是全部類型的父接口,有四個子接口和一個實現類。數組

Type實現圖

  • Class類比較常見,表示的是原始類型。表示的Java類在JVM裏表現爲一個Class對象對象

  • ParameterizedType表示的是參數化類型,如List 這種帶有泛型的類型。 blog

    ParameterizedType接口中經常使用的方法有三個,分別爲接口

    • Type getRawType() 返回參數化類型中的原始類型,如List 的原始類型爲List get

    • Type[] getActualTypeArguments() 獲取參數化類型的類型變量或是實際類型列表,如List 的參數化類型列表爲String,對於Map<String,Integer>中參數化列表爲String和Integer 源碼

    • Type getOwnerType() 返回的是類型所屬的類型,這個所屬類型就像是 Map.Entry<K,V>的所屬類型是Map<K,V>博客

  • TypeVariable表示的是類型變量,用來反應在JVM編譯該泛型前的信息。例如List 中T就是類型變量,它在編譯時須要被轉換爲一個具體的類型後才能正常使用。 string

    該接口有三個經常使用的方法,分別爲:io

    • Type[] getBounds() 獲取類型變量的上邊界,若是沒有明確聲明上邊界則默認爲Object。class Test 中K的上邊界就是Person

    • D getGenericDeclaration() 獲取聲明該類型變量的原始類型,例如class Test 中的原始類型就是Test

    • String getName() 獲取在源碼中定義的名字,例如class Test 中爲K

  • GenericArrayType表示的是數組類型且組成元素是ParameterizedType或TypeVariable,例如List []或T[]

    • 該接口只有一個方法,Type getGenericComponentType() 返回數組的組成元素類型
  • WildcardType表示的是通配符泛型,例如 ? extends Number 和 ? super Integer

    • Type[] getUpperBounds() 返回泛型變量的上邊界
    • Type[] getLowerBounds() 返回泛型變量類型的下邊界

因爲自己的博客百度沒有收錄,博客地址http://zhhll.icu

相關文章
相關標籤/搜索