摘要:反射非常強(qiáng)大和有用。另外,反射可以用在映射結(jié)果集的列名到對(duì)象的方法。本教程將深入介紹反射。本教程還將清除一些關(guān)于范型信息在運(yùn)行時(shí)可用性的認(rèn)知混淆。類(lèi)對(duì)象使用反射時(shí),起點(diǎn)通常是需要使用反射檢視的類(lèi)的對(duì)象。
Java反射可以在運(yùn)行時(shí)檢視類(lèi)、接口、屬性和方法,而無(wú)需在編譯時(shí)知道類(lèi)名、方法名等等。它也同樣使用反射支持實(shí)例化新的對(duì)象、調(diào)用方法和get/set屬性值。
Java反射非常強(qiáng)大和有用。例如, Java反射可以用在映射JSON文件的屬性到Java 對(duì)象的get/set方法,如Jackson、Gosn、Boon等庫(kù)的實(shí)現(xiàn)。另外,反射可以用在映射JDBC結(jié)果集的列名到Java對(duì)象的get/set方法。
本教程將深入介紹Java反射。它將解釋Java反射的基礎(chǔ)知識(shí),包括如何使用數(shù)組、注解、范型和動(dòng)態(tài)代理,以及動(dòng)態(tài)類(lèi)的加載和重新加載。
它還將向您展示如何執(zhí)行更具體的Java反射任務(wù),例如讀取類(lèi)的所有g(shù)etter方法,或訪(fǎng)問(wèn)類(lèi)的私有字段和方法。
本教程還將清除一些關(guān)于范型信息在運(yùn)行時(shí)可用性的認(rèn)知混淆。一些人聲稱(chēng)所有范型信息在運(yùn)行時(shí)丟失,這是不正確的。
本教程描述基于Java8。
這是一個(gè)快速的Java反射示例,向你展示使用反射的代碼格式:
Method[] methods = MyObject.class.getMethods(); for(Method method : methods){ System.out.println("method = " + method.getName()); }
Method [] methods=String.class.getMethods(); for (Method method:methods) { logger.debug("String 類(lèi)方法名稱(chēng):{},參數(shù)個(gè)數(shù):{}",method.getName(),method.getParameterCount()); }
本示例從一個(gè)名為MyObject的類(lèi)中獲取一個(gè)Class對(duì)象。使用這個(gè)class對(duì)象展示獲得它的方法列表,循環(huán)并輸出方法名稱(chēng)。
Java 類(lèi)對(duì)象使用Java反射時(shí),起點(diǎn)通常是需要使用反射檢視的類(lèi)的Class對(duì)象。例如,獲得名為MyObject類(lèi)的Class對(duì)象可以這么寫(xiě):
Class myObjectClass = MyObject.class;
現(xiàn)在,你可以引用類(lèi)MyObject的Class對(duì)象。
在Java Reflection Class tutorial中有Class對(duì)象更詳細(xì)的描述。
一旦你擁有表示某些類(lèi)的Class對(duì)象的引用,你可以訪(fǎng)問(wèn)這些類(lèi)的方法和屬性。下面是訪(fǎng)問(wèn)一個(gè)Java類(lèi)方法和屬性的示例:
Class myObjectClass = MyObject.class; Method[] methods = myObjectClass.getMethods(); Field[] fields = myObjectClass.getFields();
一旦擁有一個(gè)java類(lèi)的方法和屬性的引用,就可以開(kāi)始檢視它們。你可以獲得方法和屬性的名稱(chēng),采用的參數(shù)等等。你甚至可以通過(guò)這些方法和屬性引用調(diào)用方法和使用get/set屬性值。
在Java Reflection Fields tutorial和Java Reflection Methods tutorial教程中有關(guān)于訪(fǎng)問(wèn)方法和屬性的更詳盡的描述。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/77152.html
摘要:反射機(jī)制一結(jié)合官方通過(guò)編寫(xiě)的反射教程,復(fù)習(xí)一下反射的知識(shí)。反射的概念反射是一種在運(yùn)行時(shí)獲取以及修改應(yīng)用行為的一種工具。因?yàn)榉瓷湫枰獎(jiǎng)討B(tài)的解析類(lèi)的信息,相比于非反射使用的方式要慢。反射需要獲取一定的運(yùn)行時(shí)權(quán)限,在特定的安全環(huán)境下不一定存在。 Java反射機(jī)制(一) 結(jié)合Oracle官方通過(guò)JDK8編寫(xiě)的反射教程,復(fù)習(xí)一下反射的知識(shí)。結(jié)尾篇補(bǔ)一個(gè)小例子。 主要內(nèi)容 這次博客的主要內(nèi)容就是簡(jiǎn)...
摘要:使用反射可以在運(yùn)行時(shí)檢視類(lèi)。類(lèi)名類(lèi)修飾符等包信息超類(lèi)所實(shí)現(xiàn)的接口構(gòu)造函數(shù)方法屬性注解類(lèi)中附加了很多信息,你可以在獲得一個(gè)完整列表。全限定名包含所有的包名。構(gòu)造函數(shù)你可以訪(fǎng)問(wèn)類(lèi)的構(gòu)造函數(shù),代碼如下構(gòu)造函數(shù)的詳細(xì)教程在章節(jié)。 使用反射可以在運(yùn)行時(shí)檢視Java類(lèi)。檢視類(lèi)通常是使用反射時(shí)所做的第一件事情。從類(lèi)中可以獲得下面的信息。 類(lèi)名 類(lèi)修飾符(private、public、synchro...
摘要:模塊反射教程將解釋如何通過(guò)反射訪(fǎng)問(wèn)類(lèi)所屬的模塊。模塊的概念是添加的。模塊反射教程將通過(guò)下面的章節(jié)討論可以從模塊描述符中獲得的信息。這是示例代碼導(dǎo)出包可以通過(guò)反射,方法讀取模塊的包列表。模塊所使用的服務(wù)也被稱(chēng)為模塊的服務(wù)依賴(lài)關(guān)系。 Java模塊反射教程將解釋如何通過(guò)反射訪(fǎng)問(wèn)Java類(lèi)所屬的模塊。模塊的概念是Java 9Java Platform Module System添加的。一個(gè)Ja...
摘要:使用反射可以在運(yùn)行時(shí)訪(fǎng)問(wèn)類(lèi)附加的注解。什么是注解注解是的新特性。注解是可以添加到代碼中的一種注釋或者說(shuō)是元數(shù)據(jù)。的定義代碼在前標(biāo)記一個(gè)注解。意味著注解只能在類(lèi)型典型的類(lèi)接口上使用。注解的詳細(xì)使用教程可以參考。 使用反射可以在運(yùn)行時(shí)訪(fǎng)問(wèn)Java類(lèi)附加的注解。 什么是Java注解 注解是Java5的新特性。注解是可以添加到Java代碼中的一種注釋或者說(shuō)是元數(shù)據(jù)。注解可以使用預(yù)編譯工具在編譯...
閱讀 2689·2021-11-16 11:40
閱讀 3478·2021-11-08 13:26
閱讀 944·2021-10-28 09:32
閱讀 3595·2021-09-13 10:26
閱讀 861·2019-08-30 15:55
閱讀 844·2019-08-30 15:44
閱讀 1965·2019-08-30 15:44
閱讀 1811·2019-08-30 13:48