|
|
java.lang.Override是標準的Annotation型態之一,它告知編譯器某個方法必須是重新定義父類別或實作介面的方法,編譯器得知這項資訊後,在編譯程式時如果發現該方法
並非重新定義父類別或實作介面中的方法,就會回報錯誤。 例如,在重新定義Thread的run()方法時: public class SomeThread extends Thread {
public void Run() { //... } } 編譯時,不會有任何錯誤,即使你的run()打成了Run(),編譯器只會當你定義了一個新方法Run(),你並沒有真的重新定義run()。為了避免這類錯誤,可以加上@Override: public class SomeThread extends Thread {
@Override public void Run() { //... } } 在編譯程式時,編譯器看到@Override這個Annotation,瞭解它必須檢查這個方法是不是重新定義父類別的Run()方法,但父類 別中並沒有這個方法,所以它會回報錯誤: SomeThread.java:2: method does not override a method from its superclas
@Override ^ 1 error 重新修改一下程式,編譯時就不會有問題了: public class SomeThread extends Thread {
@Override public void run() { //... } } java.lang.Deprectated對編譯器說明某個方法已經不建議使用,如果有人試圖使用或重新定義該方法,必須提出警示訊息。 舉個例子來說,您可能定義一個CustomObject類別,並在當中定義有getSomething()方法,而在一段時間之後,您不建議使用這個方法 了,並要將這個方法標示為deprectated,您可以這麼作 : public class CustomObject {
@Deprecated public String getSomething() { // ... return "something"; } } 如果有人試圖在繼承這個類別後重新定義getSomething(),或是在程式中呼叫使用getSomething()方法,則進行編譯時,就會出現這 個警訊: Note: SubCustomObject.java uses or overrides a deprecated API.
Note: Recompile with -Xlint:deprecation for details. 想要知道詳細的警訊內容的話,可以在編譯時加上-Xline:deprecation引數,例如: >javac -Xlint:deprecation SubCustomObject.java
SubCustomObject.java:5: warning: [deprecation] getSomething() in CustomObject ha s been deprecated object.getSomething(); ^ 1 warning java.lang.SuppressWarnings對編譯器說明某個方法中若有警示訊息,則加以抑制,不用在編譯完成後出現警訊。 在這邊到說明SuppressWarnings的功能,考慮下面這個類別: public class SomeObject {
public void doSomething() { Map map = new HashMap(); map.put("some", "thing"); } } 在J2SE 5.0中加入了集合物件的Generics支援,並建議您明確的指定集合物件將內填的物件之型態,在上面這個類別中使用Map時並沒有指定內填物件之型 別,在編譯時會出現以下的訊息: Note: SomeObject.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details. 在編譯時一併指定-Xlint:unchecked可以看到警示的細節: SomeObject.java:7: warning: [unchecked] unchecked call to put(K,V) as a member o f the raw type java.util.Map
map.put("some", "thing"); ^ 1 warning 如果你想讓編譯器忽略這些細節,則可以如下使用@SuppressWarnings這個Annotation: public class SomeObject {
@SuppressWarnings(value={"unchecked"}) public void doSomething() { Map map = new HashMap(); map.put("some", "thing"); } } 這麼一來,編譯器將忽略掉"unckecked"的警訊,你也可以指定忽略多個警訊: @SuppressWarnings(value={"unchecked", "deprecation"})
|