第三種是全值注釋類型。全注釋類型其實並不算是一個真正的類型,只是使用注釋類 型完整的語法:
清單9 全值注釋的用法
@MultipleValueAnnotation(
key1=value1,
key2=value2,
key3=value3,
)
2.2.2 J2SE的內建注釋(build-in annotation)
在程序中不僅可以使用自己定義的注釋,還可以使用J2SE5.0中內建的注釋類型。下面 我們就詳細來介紹J2SE5.0提供的注釋類型。J2SE 5.0中預定義了三種注釋注釋類型:
Override :Java.lang.Override 表示當前的方法重寫了父類的某個方法,如果父類 的對應的方法並不存在,將會發生編譯錯誤。
Deprecated:Java.lang.Deprecated 表示 並不鼓勵使用當前的方法或者域變量。
SuppressWarnings: Java.lang.SuppressWarnings關閉編譯器告警,這樣,在編譯1.5 之前的代碼的時候,不會出現大量不關心的無關的告警。
下面舉一個使用Override的例子。Override這個注釋類型在使用模板方法(Template Method,圖2)非常有用。熟悉設計模式的讀者們一定知道,模板方法中通常定義了抽象 類,並且這個抽象類中定義了主要的控制流。子類就是通過重寫父類中控制流中所調用的 方法來實現自己的邏輯。有的時候,父類會將這些方法定義為抽象方法,但是有的時候也 會提供缺省實現。在後者的情況下,子類可以不實現這個方法。
這樣就帶來一個問題,如果你希望在子類中重寫這個方法,但是無意中寫錯了方法的 名字,這個錯誤是很難被發現的。因為你希望重寫的這個方法,會被編譯器當作一個新的 方法而不是重寫父類的方法。而現在使用@Override,這個擔心就是不必要的。如果你拼 錯了你希望重寫的方法,編譯器會報錯,告訴你父類沒有相應的方法。
圖2 模板方法的類圖
清單10給出了模板方法的一個例子。這個例子中有定義了兩個類,SubClass和 BaseClass。其中SubClass繼承了BaseClass,並且希望重寫BaseClass的方法doPartII( )。然而SubClass中錯誤的拼寫了這個方法的名稱。圖3顯示了SubClass中的編譯錯誤。 熟悉eclipse的讀者會看到在編輯器裡出現了Error Marker,說明這一行有編譯錯誤。將 鼠標指向這行,顯示了錯誤信息。
清單10 模板方法
public abstract class BaseClass{ //模板方法的基類
public void doWork(){
doPartI(); //先調用doPartI()方法
doPartII();//之後調用doPartII()方法
}
public abstract void doPartI();
public void doPartII(){
}
}
public class SubClass extend BaseClass{
public void doPartI(){
};
@Override
public void doPortII(){//拼寫錯誤,產生編譯錯誤
System.out.println("override the method of superclass");
}
}
圖3 Override應用的例子
本文來自編程入門網:http://www.bianceng.cn/Programming/Java/201104/25424_3.htm