第17篇-JAVA Annotation 注解

2022-03-11 11:29 更新
  • 每篇一句 :真的努力后你會(huì)發(fā)現(xiàn)自己要比想象的優(yōu)秀很多
  • 初學(xué)心得: 懷著一顆奮斗不息的心,一切困苦艱辛自當(dāng)迎刃而解
  • (筆者:JEEP/711)[JAVA筆記 | 時(shí)間:2017-05-17| JAVA Annotation注解 ]

1.什么是注解(Annotation)

Annotation 其實(shí)就是代碼里的特殊標(biāo)記, 它用于替代配置文件,也就是說(shuō),傳統(tǒng)方式通過(guò)配置文件告訴類(lèi)如何運(yùn)行,有了注解技術(shù)后,開(kāi)發(fā)人員可以通過(guò)注解告訴類(lèi)如何運(yùn)行。在Java技術(shù)里注解的典型應(yīng)用是:可以通過(guò)反射技術(shù)去得到類(lèi)里面的注解,以決定怎么去運(yùn)行類(lèi)
- Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法
- Annotion(注解)是一個(gè)接口,程序可以通過(guò)反射來(lái)獲取指定程序元素的Annotion對(duì)象,然后通過(guò)Annotion對(duì)象來(lái)獲取注解里面的元數(shù)據(jù)
- Annotation(注解)是JDK5.0及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時(shí)檢查。從某些方面看,annotation就像修飾符一樣被使用,并應(yīng)用于包、類(lèi) 型、構(gòu)造方法、方法、成員變量、參數(shù)、本地變量的聲明中

2.基本Annotation


<br> @Override: 限定重寫(xiě)父類(lèi)方法, 該注解只能用于方法
<br> @Deprecated: 用于表示某個(gè)程序元素(類(lèi), 方法等)已過(guò)時(shí)
<br> @SuppressWarnings: 抑制編譯器警告
<br> ```

3.自定義Annotation

  • 使用@interface定義Annotation
    - 使用Annotation修飾程序中的類(lèi)、方法、變量、接口等定義,通常我們會(huì)把Annotation放在所有修飾符之前
    - 定義帶成員變量的Annotation
    - 為Annotation的成員變量指定初始值

4.提取Annotation信息

  • Annotation接口來(lái)代表程序元素前面的注釋?zhuān)摻涌谑撬蠥nnotation類(lèi)型的父接口
    - AnnotatedElement接口代表程序中可以接受注釋的程序元素
    - 調(diào)用AnnotatedElement對(duì)象的如下三個(gè)方法來(lái)訪問(wèn)Annotation信息:
    - getAnnotation(Class<T& annotationClass):返回該程序元素上存在的、指定類(lèi)型的注釋,如果該類(lèi)型的注釋不存在,則返回null
    - Annotation[] getAnnotations():返回該程序元素上存在的所有注釋
    - boolean isAnnotationPresent(Class<? extends Annotation& annotationClass):判斷該程序元素上是否包含指定類(lèi)型的注釋?zhuān)嬖趧t返回true,否則返回false

5.Annotation 注解實(shí)例

自定義Annotation

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 定義一個(gè)注解
*/
@Target(ElementType.METHOD) // 這是一個(gè)對(duì)方法的注解,還可以是包、類(lèi)、變量等很多東西
@Retention(RetentionPolicy.RUNTIME) // 保留時(shí)間,一般注解就是為了框架開(kāi)發(fā)時(shí)代替配置文件使用,JVM運(yùn)行時(shí)用反射取參數(shù)處理,所以一般都為RUNTIME類(lèi)型
@Documented // 用于描述其它類(lèi)型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API,因此可以被例如javadoc此類(lèi)的工具文檔化
public @interface OneAnnotation {
// 定義注解的參數(shù),類(lèi)型可以為基本類(lèi)型以及String、Class、enum、數(shù)組等,default為默認(rèn)值
String parameter1() default "";
int parameter2() default -1;
}

使用注解

/**
* 一個(gè)用到了自定義的注解的類(lèi)
*/
public class OClass {
@OneAnnotation(parameter1="YES", parameter2=10)
public void oneMethod () {
}
}

獲取注解參數(shù)

import java.lang.reflect.Method;
public class TestDemo {
public static void main(String[] args) throws Exception {
// 提取到被注解的方法Method,這里用到了反射的知識(shí)
Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod");
// 從Method方法中通過(guò)方法getAnnotation獲得我們?cè)O(shè)置的注解
OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class);
// 得到注解的倆參數(shù)
System.out.println(oneAnnotation.parameter1());
System.out.println(oneAnnotation.parameter2());
}
}

初學(xué)(JAVA Annotation注解 高級(jí)階段) 難點(diǎn): ★★★★★

希望每一篇文章都能夠?qū)ψx者們提供幫助與提升,這乃是每一位筆者的初衷

感謝您的閱讀 歡迎您的留言與建議

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)