3、注解與反射

1、注解的作用或者意義是什么?

注解本身沒(méi)有任何意義,單獨(dú)的注解就是一種注釋?zhuān)枰Y(jié)合其他如反射、插樁等技術(shù)才有意義。

Java 注解(Annotation)又稱(chēng) Java 標(biāo)注,是 JDK1.5 引入的一種注釋機(jī)制。是元數(shù)據(jù)的一種形式,提供有關(guān)于程序但不屬于程序本身的數(shù)據(jù)。注解對(duì)它們注解的代碼的操作沒(méi)有直接影響。

2、元注解

在定義注解時(shí),注解類(lèi)也能夠使用其他的注解聲明。對(duì)注解類(lèi)型進(jìn)行注解的注解類(lèi),我們稱(chēng)之為 meta-annotation(元注解)。聲明的注解允許作用于哪些節(jié)點(diǎn)使用@Target聲明;保留級(jí)別由@Retention 聲明。其中保留級(jí)別如下。

RetentionPolicy.SOURCE

標(biāo)記的注解僅保留在源級(jí)別中,并被編譯器忽略。

RetentionPolicy.CLASS

標(biāo)記的注解在編譯時(shí)由編譯器保留,但 Java 虛擬機(jī)(JVM)會(huì)忽略。

RetentionPolicy.RUNTIME

標(biāo)記的注解由 JVM 保留,因此運(yùn)行時(shí)環(huán)境可以使用它。

SOURCE < CLASS < RUNTIME,即CLASS包含了SOURCE,RUNTIME包含SOURCE、CLASS。

根據(jù)注解的保留級(jí)別不同,對(duì)注解的使用自然存在不同場(chǎng)景

3.2.1 注解的應(yīng)用場(chǎng)景

3、Android注解語(yǔ)法檢查

在Android中我們需要設(shè)計(jì)接口以供使用者調(diào)用時(shí),如出現(xiàn)需要對(duì)入?yún)⑦M(jìn)行類(lèi)型限定,如限定為資源ID、布局ID等類(lèi)型參數(shù),將參數(shù)類(lèi)型直接給定int即可。然而,我們可以利用Android為我們提供的語(yǔ)法檢查注解,來(lái)輔助進(jìn)行更為直接的參數(shù)類(lèi)型檢查與提示。

參數(shù)限制為:圖片資源ID。


3.3.1參數(shù)限制為圖片資源id

同時(shí),我們也可以通過(guò)利用@Intdef來(lái)定義自己的入?yún)㈩?lèi)型檢查。

4、反射

一般情況下,我們使用某個(gè)類(lèi)時(shí)必定知道它是什么類(lèi),是用來(lái)做什么的,并且能夠獲得此類(lèi)的引用。于是我們直接對(duì)這個(gè)類(lèi)進(jìn)行實(shí)例化,之后使用這個(gè)類(lèi)對(duì)象進(jìn)行操作。

反射則是一開(kāi)始并不知道我要初始化的類(lèi)對(duì)象是什么,自然也無(wú)法使用 new 關(guān)鍵字來(lái)創(chuàng)建對(duì)象了。這時(shí)候,我們使用 JDK 提供的反射 API 進(jìn)行反射調(diào)用。反射就是在運(yùn)行狀態(tài)中,對(duì)于任意一個(gè)類(lèi),都能夠知道這個(gè)類(lèi)的所有屬性和方法;對(duì)于任意一個(gè)對(duì)象,都能夠調(diào)用它的任意方法和屬性;并且能改變它的屬性。是Java被視為動(dòng)態(tài)語(yǔ)言的關(guān)鍵。


3.4.1反射知識(shí)點(diǎn)

5、Type


3.5.1反射的type

A、TypeVariable

? 泛型類(lèi)型變量。可以泛型上下限等信息;

B、ParameterizedType

? 具體的泛型類(lèi)型,可以獲得元數(shù)據(jù)中泛型簽名類(lèi)型(泛型真實(shí)類(lèi)型)

C、GenericArrayType

? 當(dāng)需要描述的類(lèi)型是泛型類(lèi)的數(shù)組時(shí),比如List[],Map[],此接口會(huì)作為T(mén)ype的實(shí)現(xiàn)。

WildcardType

? D、通配符泛型,獲得上下限信息;

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容