1、Java 8除了在繼承關系上的限制(不能添加泛型聲明也不能添加extends繼承另外的接口),聲明時用@interface而不是interface以外,注解類型和普通接口沒有區別
2、注解類型中可以包含多個元素,通過方法聲明形式來定義,這些方法的聲明不能有任何參數或類型參數,也沒有方法體;方法返回值類型只能是基本類型、String、Class、Enum、注解類型和數組類型,數組不支持多維數組。注解類型也可以沒有任何元素。若注解類型只有一個元素,一般命名為value(作為使用時候的默認傳值對象),通過方法後生命default來實現默認值:
public @interface Fuck {
String me() default "author";
int you() default 2;
Class<?> him() default Integer.class;
String[] all() default {"you", "me"};
}
value的時候:
public @interface ComeOn {
String value() default "";
}
例子:
@ComeOn("Shit")
@Fuck(me = "Wang8Dan", you = 250, all = {"SB", "XB", "DB"})
public void test() {
System.out.println("OK");
}
3、注解分為兩類:
1)配置注解的元注解
(1)枚舉類型ElementType:TYPE(類型聲明),ANNOTATION_TYPE(注解類型聲明),PACKAGE(包聲明),CONSTRUCTOR(構造函數聲明),FIELD(域聲明),METHOD(方法聲明),PARAMETER(方法參數聲明),LOCAL_VARIABLE(局部變量聲明),其中每種類型代表了這個注解的使用范圍
(2)Rentention:SOURCE(注解只會出現在源碼,不會出現在字節碼),CLASS(注解保留到字節碼,但聲明在局部變量上的任何情況都只出現在源碼),RUNTIME(注解運行時可用,可以通過反射API調用)
(3)Inherited,說明使用此聲明的類,它的子類繼承上述聲明
2)一般注解
(1)Override
(2)Deprecated
(3)SuppressWarning:阻止編譯時拋出的某些警告,使用的時候如:@SuppressWarning("UnChecked")