3、注解與反射

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

注解本身沒有任何意義,單獨的注解就是一種注釋,他需要結(jié)合其他如反射、插樁等技術才有意義。

Java 注解(Annotation)又稱 Java 標注,是 JDK1.5 引入的一種注釋機制。是元數(shù)據(jù)的一種形式,提供有關于程序但不屬于程序本身的數(shù)據(jù)。注解對它們注解的代碼的操作沒有直接影響。

2、元注解

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

RetentionPolicy.SOURCE

標記的注解僅保留在源級別中,并被編譯器忽略。

RetentionPolicy.CLASS

標記的注解在編譯時由編譯器保留,但 Java 虛擬機(JVM)會忽略。

RetentionPolicy.RUNTIME

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

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

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

3.2.1 注解的應用場景

3、Android注解語法檢查

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

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


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

同時,我們也可以通過利用@Intdef來定義自己的入?yún)㈩愋蜋z查。

4、反射

一般情況下,我們使用某個類時必定知道它是什么類,是用來做什么的,并且能夠獲得此類的引用。于是我們直接對這個類進行實例化,之后使用這個類對象進行操作。

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


3.4.1反射知識點

5、Type


3.5.1反射的type

A、TypeVariable

? 泛型類型變量。可以泛型上下限等信息;

B、ParameterizedType

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

C、GenericArrayType

? 當需要描述的類型是泛型類的數(shù)組時,比如List[],Map[],此接口會作為Type的實現(xiàn)。

WildcardType

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

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容