摘要:知識點(diǎn)總結(jié)反射反射操作泛型知識點(diǎn)總結(jié)反射采用泛型擦除的機(jī)制來引入泛型。中的泛型僅僅是給編譯器使用的,確保數(shù)據(jù)的安全性和免去強(qiáng)制類型轉(zhuǎn)換的麻煩。
Java知識點(diǎn)總結(jié)(反射-反射操作泛型)
@(Java知識點(diǎn)總結(jié))[Java, 反射]
Java采用泛型擦除的機(jī)制來引入泛型。Java中的泛型僅僅是給編譯器javac使用的, 確保數(shù)據(jù)的安全性和免去強(qiáng)制類型轉(zhuǎn)換的麻煩 。但是,__一旦編譯完成,所有的和泛型有關(guān)的類型全部擦除__。
為了通過反射操作這些類型以迎合實(shí)際開發(fā)的需要,Java就新增了ParameterizedType,GenericArrayType,TypeVariable 和WildcardType幾種類型來代表不能被歸一到Class類中的類型但是又和原始類型齊名的類型。
ParameterizedType: 表示一種參數(shù)化的類型,比如Collection
GenericArrayType: 表示一種元素類型是參數(shù)化類型或者類型變量的數(shù)組類型
TypeVariable: 是各種類型變量的公共父接口
WildcardType: 代表一種通配符類型表達(dá)
示例:
import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; import java.util.List; import java.util.Map; public class Test06 { public void t1(Mapmap , List list){ System.out.println("t1"); } // 獲得指定方法,參數(shù)的泛型信息 private static void test1() { try { Method m = Test06.class.getMethod("t1", Map.class,List.class); Type[] types = m.getGenericParameterTypes(); for (Type paramType : types) { System.out.println("#"+paramType); if (paramType instanceof ParameterizedType) { Type[] genericTypes = ((ParameterizedType)paramType).getActualTypeArguments(); for (Type genericType : genericTypes) { System.out.println("————參數(shù)泛型類型:"+genericType); } } } } catch (Exception e) { e.printStackTrace(); } } public Map t2(){ System.out.println("t2"); return null; } // 獲取指定方法返回值泛型信息 private static void test2() { try { Method m = Test06.class.getMethod("t2", null); Type returnType = m.getGenericReturnType(); if (returnType instanceof ParameterizedType) { Type[] genericTypes = ((ParameterizedType)returnType).getActualTypeArguments(); for (Type genericType : genericTypes) { System.out.println("返回值泛型類型:"+genericType); } } } catch (NoSuchMethodException | SecurityException e) { e.printStackTrace(); } } public static void main(String[] args) { test1(); System.out.println("-------------"); test2(); } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/71597.html
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊(duì)的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
摘要:通過反射獲取無參構(gòu)造方法并使用得到無參構(gòu)造方法獲取所有的修飾的構(gòu)造方法。如果方法沒有返回值,返回的是反射獲取空參數(shù)成員方法并運(yùn)行代碼演示反射獲取成員方法并運(yùn)行獲取對象中的成員方法獲取的是文件中的所有公共成員方法包括繼承的類是描述 01類加載器 * A.類的加載 當(dāng)程序要使用某個類時,如果該類還未被加載到內(nèi)存中,則系統(tǒng)會通過加載,連接,初始化三步來實(shí)現(xiàn)對這個類進(jìn)行初始化。 ? ...
摘要:第章元編程與注解反射反射是在運(yùn)行時獲取類的函數(shù)方法屬性父類接口注解元數(shù)據(jù)泛型信息等類的內(nèi)部信息的機(jī)制。本章介紹中的注解與反射編程的相關(guān)內(nèi)容。元編程本質(zhì)上是一種對源代碼本身進(jìn)行高層次抽象的編碼技術(shù)。反射是促進(jìn)元編程的一種很有價值的語言特性。 第12章 元編程與注解、反射 反射(Reflection)是在運(yùn)行時獲取類的函數(shù)(方法)、屬性、父類、接口、注解元數(shù)據(jù)、泛型信息等類的內(nèi)部信息的機(jī)...
摘要:知識點(diǎn)總結(jié)反射介紹知識點(diǎn)總結(jié)反射反射程序在運(yùn)行狀態(tài)中,可以動態(tài)加載一個只有名稱的類動態(tài)調(diào)用類的所有屬性和方法加載完類之后,在堆內(nèi)存中,就產(chǎn)生了一個類型的對象一個類只有一個對象。 Java知識點(diǎn)總結(jié)(反射-介紹) @(Java知識點(diǎn)總結(jié))[Java, 反射] 反射 程序在 運(yùn)行狀態(tài)中 ,可以動態(tài)加載一個只有名稱的類 (動態(tài)調(diào)用類的所有屬性和方法)Class c = Class.for...
摘要:由于類型擦除機(jī)制的存在,泛型類中的類型參數(shù)等信息,在運(yùn)行時刻是不存在的。對此,對類文件的格式做了修訂,添加了屬性,用來包含不在類型系統(tǒng)中的類型信息。在運(yùn)行時刻,會讀取屬性的內(nèi)容并提供給反射來使用。 OOP 對象的創(chuàng)建和拷貝 對象的初始化 多態(tài)的實(shí)現(xiàn) 內(nèi)部類、匿名類、靜態(tài)類 對象內(nèi)存模型 上面內(nèi)容均請參考以下文章: 談?wù)凧ava的面向?qū)ο?運(yùn)行時 異常 聊聊Java的異常機(jī)制及實(shí)現(xiàn) ...
閱讀 1329·2021-11-16 11:44
閱讀 3793·2021-10-09 10:01
閱讀 1789·2021-09-24 10:31
閱讀 3903·2021-09-04 16:41
閱讀 2545·2021-08-09 13:45
閱讀 1244·2019-08-30 14:08
閱讀 1820·2019-08-29 18:32
閱讀 1667·2019-08-26 12:12