java中的內置註解Annotation – JAVA編程語言程序開發技術文章

背景知識:
       從JDK5開始提供名為Annotation(註釋)的功能,它被定義為JSR-175規范。註釋是以“@註釋名”在代碼中存在的,還可以添加一些參數值,例如:@SuppressWarnings(value="unchecked")。註釋可以附加在package, class, method, field等上面,相當於給它們添加瞭額外的輔助信息,我們可以通過反射機制編程實現對這些元數據的訪問。如果沒有外部解析工具等對其加以解析和處理的情況,本身不會對Java的源代碼或class文件等產生任何影響,也不會對它們的執行產生任何影響。
     元數據的作用,大致可分為三種:編寫文檔,通過代碼裡標識的元數據生成文檔;代碼分析,通過代碼裡標識的元數據對代碼進行分析;編譯檢查,通過代碼裡標識的元數據讓編譯器能實現基本的編譯檢查。

JDK5內置的基本註釋
    JDK5內置瞭一些常用的註釋,可以在編譯時幫我們捕獲部分編譯錯誤,及提示信息,下面介紹下這些註釋的用法:

1、@Override定義在java.lang.Override中,此註釋隻適用於修辭方法,表示一個方法聲明打算重寫超類中的另一個方法聲明。如果方法利用此註釋類型進行註解但沒有重寫超類方法,則編譯器會生成一條錯誤消息。例如我們為某類重寫toString()方法卻寫成瞭tostring(),並且我們為該方法添加瞭@Override註釋;代碼如下:

public class OverrideDemo {
    @Override
    public String tostring() {
        return super.toString();
    }
}

 

在編譯時,會提示以下錯誤信息:

OverrideTest.java:4: 方法未覆蓋其父類的方法
          @Override
         ^1 錯誤www.aiwalls.com
 
 
 
2、@Deprecated定義在java.lang.Deprecated中,此註釋可用於修辭方法、屬性、類,表示不鼓勵程序員使用這樣的元素,通常是因為它很危險或存在更好的選擇。在使用不被贊成的程序元素或在不被贊成的代碼中執行重寫時,編譯器會發出警告。使用@Deprecated的示例代碼如下:

public class DeprecatedDemo {
    public static void main(String[] args) {
         DeprecatedClass.DeprecatedMethod();
    }
}
class DeprecatedClass {
    @Deprecated
    public static void DeprecatedMethod() {
    }
}
 
在編譯時,會得到以下提示信息:

註意:DeprecatedDemo.java 使用或覆蓋瞭已過時的 API。
註意:要瞭解詳細信息,請使用 -Xlint:deprecation 重新編譯。

要註意@Deprecated與@deprecated的區別,@deprecated是為瞭生成文檔的需要,例如:

class DeprecatedClass {

@Deprecated
    public static void DeprecatedMethod() {
    }
}
 
 

 
3、@SuppressWarnings定義在java.lang.SuppressWarnings中,用來抑制編譯時的警告信息。與前兩個註釋有所不同,你需要添加一個參數才能正確使用,這些參數值都是已經定義好瞭的,我們選擇性的使用就好瞭,參數如下:

 

 

通過上面的表格,你應該瞭解到每個參數的用意瞭,下面我就以一個常用的參數unchecked為例,為你展示如何使用@SuppressWarnings註釋,示例代碼如下:

import java.util.List;
import java.util.ArrayList;
public class SuppressWarningsDemo {
        public static List cache = new ArrayList();
        //@SuppressWarnings(value = "unchecked")
        public void add(String data) {
            cache.add(data);
        }
}

 

當我們不使用@SuppressWarnings註釋時,編譯器就會有如下提示:

 

引用
註意:SuppressWarningsDemo.java 使用瞭未經檢查或不安全的操作。
註意:要瞭解詳細信息,請使用 -Xlint:unchecked 重新編譯。
 

另外,由於@SuppressWarnings註釋隻有一個參數,並且參數名為value,所以我們可以將上面一句註釋簡寫為
@SuppressWarnings("unchecked")。

同時參數value可以取多個值如:
@SuppressWarnings(value={"unchecked", "deprecation"})
或@SuppressWarnings({"unchecked", "deprecation"})。

 

摘自  IT胖子的專欄
 

 

發佈留言