文章目錄
注解和反射
注解
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