天天看點

Java元注解機制,java基礎(5)——注解和反射(1)注解(内置注解、元注解、自定義注解)...

文章目錄

注解和反射

注解

Annotation是從jdk5.0開始引入的新技術

Annotation的作用:

不是程式本身,可以對程式做出解釋

可以被其他程式讀取

Annotation的格式:

@注釋名,還可以添加一些參數

@SuppressWarnings(value=“unchecked”)

Annotation在哪裡使用?

可以附加在package,class,method,field等上面,相當于給他們添加了額外的輔助資訊,我們可以通過反射機制程式設計實作對這些中繼資料的通路

内置注解

@Override:定義在java.lang.Override中,此注解值隻适用于修辭方法,表示一個方法聲明打算重寫超類中的另一個方法聲明。

Deprecated:定義在java.lang.Deprecated中,此注解值隻适用于修辭方法,屬性,類表示不鼓勵程式員使用這樣的元注釋,通常是因為他很危險或者存在更好的選擇

@SuppressWarnings:定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告資訊

與前兩個注解有所不同,需要添加一個參數才能正确使用,這些參數都是已經定義好了的,選擇性使用即可

@SuppressWarnings(“all”)

@SuppressWarnings(“unchecked”)

@SuppressWarnings(value={“unchecked”,“deprecation”})

public class TestAnno {

//@Override重寫超類的方法

@Override

public String toString() {

return super.toString();

}

//不推薦使用,但可以用

@Deprecated

public static void test1(){

System.out.println("deprecated");

}

//抑制編譯時警告 需要參數

@SuppressWarnings("all")

public void test2(){}

public static void main(String[] args) {

test1();

}

}

// @SuppressWarnings源碼

@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.CONSTRUCTOR, ElementType.LOCAL_VARIABLE})//可以放置的地方

@Retention(RetentionPolicy.SOURCE)

public @interface SuppressWarnings {

String[] value();//表示參數

}

元注解

元注解的作用就是負責解釋其他注解,Java定義了4個标準的meta-annotation類型,他們被用來提供對其他annotation類型的說明

這些類型和他們所支援的類在java.lang.annotation包中

@Target:用于描述注解的使用範圍

@Retention:表示需要在什麼級别儲存該注解資訊,用于描述注解的生命周期

runtime>class>source

@Document:說明該注解被包含在javadoc中

@Inherited:說明子類可以繼承父類的該注解

//注解可以在什麼地方使用

@Target(value = {ElementType.FIELD, ElementType.METHOD})

//注解在什麼時候有效 runtime>class>source

@Retention(RetentionPolicy.RUNTIME)

//是否生成javadoc

@Documented

//是否繼承注解

@Inherited

public @interface MyAnnotation { }

自定義注解

使用@interface自定義注解時,自動繼承了java.lang.annotation.Annotation接口

分析

@interface用來聲明一個注解,格式:public @interface 注解名{定義内容}

其中每一個方法實際上是聲明了一個配置參數

方法的名稱就是參數的名稱

傳回值類型就是參數類型(傳回值隻能是基本類型Class,String,enum)

可以通過default來聲明參數的預設值

如果隻有一個參數成員,一般參數名為value,因為可以省去

注解元素必須要有值,我們定義注解元素時,經常使用空字元串,0作為預設值

public class TestMyAnno {

// @MyAnnotation1(hobbies = {"code, read"})

@MyAnnotation2("here")//@MyAnnotation2(value = "here")

public static void main(String[] args) {

}

}

@Target({ElementType.METHOD, ElementType.TYPE})

@Retention(RetentionPolicy.RUNTIME)

@interface MyAnnotation1{

//定義: 參數類型 參數名();

int id() default 0;//預設值為0,當有預設值時,在寫注解時,可以寫也可以不寫

int age() default -1;//預設值為-1,代表不存在

String name() default "";

String[] hobbies();

}

@interface MyAnnotation2{

String value();//當隻有一個參數時,可以用value,因為在寫時,參數名可以省去

}

如有不對的地方歡迎指出,共同進步!

标簽:java,自定義,SuppressWarnings,value,參數,注解,ElementType,public

來源: https://blog.csdn.net/weixin_45734378/article/details/113725749