注解是一個描述數(shù)據(jù)的數(shù)據(jù),僅僅是元數(shù)據(jù)菩咨,和邏輯無關。
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
上面是Java里面 @Override 的實現(xiàn)陡厘,這里面什么都沒做抽米,那 Java 是怎么實現(xiàn)繼承檢查的呢?
@Inherited // 表示子類繼承該注解
@Target(ElementType.FIELD) // 注解用于什么地方(FIELD 用于屬性)
@Retention(RetentionPolicy.RUNTIME) // 定義該注解的生命周期糙置。(RUNTIME 一直到運行期)
@Documented // 一個簡單的Annotations標記注解云茸,表示是否將注解信息添加在java文檔中
// 1、我們先來定義一個注解
@Target(ElementType.FIELD) // 注解用在屬性上
@Retention(RetentionPolicy.RUNTIME) // 注解保留到運行期
@Documented // 將注解信息添加在java文檔中
public @interface TestAnnotation {
String testAnnoValue() default "myValue";
}
// 2谤饭、寫一個類使用該注解
public class TestClass {
@TestAnnotation("測試屬性")
private String testFieldA;
@TestAnnotation
private String testFieldB;
}
// 3标捺、寫一個類來實現(xiàn)注解的邏輯
public static void main(String[] args) {
Class c = TestClass.class;
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
TestAnnotation testAnnotation = field.getAnnotation(TestAnnotation.class);
if (testAnnotation != null) {
System.out.println("field:" + field.getName() + " value : " + testAnnotation.testAnnoValue());
}
}
// 上面的循環(huán)輸出
// field:testFieldA value : 測試屬性
// field:testFieldB value : myValue
}
通過上面的例子是否明白了為什么 @Override 注解只有兩三行代碼?
因為 @Override 注解編譯器實現(xiàn)了業(yè)務邏輯代碼揉抵。