W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
Annotation 其實就是代碼里的特殊標(biāo)記, 它用于替代配置文件,也就是說,傳統(tǒng)方式通過配置文件告訴類如何運行,有了注解技術(shù)后,開發(fā)人員可以通過注解告訴類如何運行。在Java技術(shù)里注解的典型應(yīng)用是:可以通過反射技術(shù)去得到類里面的注解,以決定怎么去運行類
- Annotation(注解)就是Java提供了一種元程序中的元素關(guān)聯(lián)任何信息和著任何元數(shù)據(jù)(metadata)的途徑和方法
- Annotion(注解)是一個接口,程序可以通過反射來獲取指定程序元素的Annotion對象,然后通過Annotion對象來獲取注解里面的元數(shù)據(jù)
- Annotation(注解)是JDK5.0及以后版本引入的。它可以用于創(chuàng)建文檔,跟蹤代碼中的依賴性,甚至執(zhí)行基本編譯時檢查。從某些方面看,annotation就像修飾符一樣被使用,并應(yīng)用于包、類 型、構(gòu)造方法、方法、成員變量、參數(shù)、本地變量的聲明中
<br> @Override: 限定重寫父類方法, 該注解只能用于方法 <br> @Deprecated: 用于表示某個程序元素(類, 方法等)已過時 <br> @SuppressWarnings: 抑制編譯器警告 <br> ```
- 使用@interface定義Annotation
- 使用Annotation修飾程序中的類、方法、變量、接口等定義,通常我們會把Annotation放在所有修飾符之前
- 定義帶成員變量的Annotation
- 為Annotation的成員變量指定初始值
- Annotation接口來代表程序元素前面的注釋,該接口是所有Annotation類型的父接口
- AnnotatedElement接口代表程序中可以接受注釋的程序元素
- 調(diào)用AnnotatedElement對象的如下三個方法來訪問Annotation信息:
- getAnnotation(Class<T& annotationClass):返回該程序元素上存在的、指定類型的注釋,如果該類型的注釋不存在,則返回null
- Annotation[] getAnnotations():返回該程序元素上存在的所有注釋
- boolean isAnnotationPresent(Class<? extends Annotation& annotationClass):判斷該程序元素上是否包含指定類型的注釋,存在則返回true,否則返回false
自定義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;
/**
* 定義一個注解
*/
@Target(ElementType.METHOD) // 這是一個對方法的注解,還可以是包、類、變量等很多東西
@Retention(RetentionPolicy.RUNTIME) // 保留時間,一般注解就是為了框架開發(fā)時代替配置文件使用,JVM運行時用反射取參數(shù)處理,所以一般都為RUNTIME類型
@Documented // 用于描述其它類型的annotation應(yīng)該被作為被標(biāo)注的程序成員的公共API,因此可以被例如javadoc此類的工具文檔化
public @interface OneAnnotation {
// 定義注解的參數(shù),類型可以為基本類型以及String、Class、enum、數(shù)組等,default為默認值
String parameter1() default "";
int parameter2() default -1;
}
使用注解
/**
* 一個用到了自定義的注解的類
*/
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,這里用到了反射的知識
Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod");
// 從Method方法中通過方法getAnnotation獲得我們設(shè)置的注解
OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class);
// 得到注解的倆參數(shù)
System.out.println(oneAnnotation.parameter1());
System.out.println(oneAnnotation.parameter2());
}
}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: