Java註解介紹
基於註解(Annotation-based)的Java開發無疑是最新的開發趨勢.[譯者註: 這是05年的文章,在2014年,毫無疑問,多人合作的開發,使用註解變成很好的合作方式,相互之間的影響和耦合可以很低].
基於註解的開發將Java開發人員從繁瑣笨重的配置文件中解脫出來. Java 5.0中首次引入了註解,註解是這個JDK版本的特性之一,將程式設計師書寫Java範例API文件的工作轉交給了編譯器. 當不再維護分開的源代碼和API文檔後,代碼和文檔會更容易維護. 生成的代碼示例也不太可能包含錯誤.
Java註解是JDK 5中的主要特性之一,使開發變得更簡單容易. 註解就像一種元信息(meta,可以理解為額外的信息,用來給特殊的程序看的),可以添加到程式碼中,可以被用到包(package)的宣告,型別(type)宣告、建構子(constructors)、方法(methods)、屬性域(fields)、參數(parameters)、變數(variables)上.他們提供一個有效的方式來指示方法是否依賴其他方法,是否完整,類別(class)是否引用其他類別,等等.
引用甲骨文公司的官方網站的說明,"它(基於註解的開發)可以讓我們在很多時候不必再寫一份單獨的API文檔說明,只需要啟用工具來從源碼中的註解生成即可. 這形成了一種聲明式的程式設計風格,程式設計師說,需要做什麼,就讓工具根據程式碼來做就好了."
簡單來說,註解是一種將meta標記(meta-tag)與程式元素關聯的機制,允許編譯器(compiler)或JVM從有註解的元素提取程式行為,必要時產生相互依賴的程式碼.
在本系列文章的第一部分,我將介紹一些基本的Java註解,他們的用處(benefits),以及一些範例用法(usages).
Java註解基礎知識
你需要了解兩個地方. 一是"註解"(annotation, 類似於一個new出來的對象)本身,二是"註解的類型"(annotation type, 類似於class定義). 註解是一個meta標記,用在你的程式碼中,其實它是有生命週期和適用範圍的. annotation type是用來定義註解的. 當你想要創建自己的註解時,你就會用到它. type才是實際使用的構造類型,註解只是那個類型的一個具體用法.
定義註解類型時需要使用一個"at"(@,國內有人讀作圈a)標記,緊跟著是關鍵字interface, 再加上註解的名字(name). 另一方面,使用註解的形式,也是先寫上"at"符號(@),其次是註解類型. 這是最簡單的註解形式. 另外,你可以在使用註解時,在名字後面加上小括號,裡面附上需要傳遞的參數. 後面你會看到他們的例子:
定義註解類型範例: (Annotation Type,註解類型, 類似定義一個類別)
複製代碼代碼如下:
public @interface MyAnnotation {
String doSomething();
}
在普通程式碼中使用註解(Annotation實例)
複製代碼代碼如下:
@MyAnnotation (doSomething="What to do")
public void mymethod() {
....
}
Java註解類型(Annotation Types)
有三種類型的註解:
標記(Marker): 標記類型的註解沒有元素,只有一個名字.
定義:
複製代碼代碼如下:
// 這種註解,就像一種標籤, 沒有狀態
// 有點像是沒有方法定義的介面Serializable一樣
public @interface AMarkerAnnotation {
}
使用:
複製代碼代碼如下:
@AMarkerAnnotation
public void mymethod() {
....
}
單一元素的註解: 單一元素(Single-Element)或單一值這種類型的註解,只帶一個資料. 可以在括號內用data=value 的方式表示,也可以只傳遞一個值(簡單的寫法).
定義:
複製代碼代碼如下:
public @interface SingleElementAnnotation
{
String doSomething();
}
使用:
複製代碼代碼如下:
@SingleElementAnnotation ("可以只傳對應類型的值")
public void mymethod() {
....
}
Full-value或多個值的註解: Full-value類型的註解有多個資料成員. 因此,必須為每個成員使用完整的data=value 語法格式傳遞參數.
定義:
複製代碼代碼如下:
public @interface FullValueAnnotation {
String doSomething();
int count;
String date();
}
使用:
複製代碼代碼如下:
@FullValueAnnotation (doSomething="參數值", count=1,
date="09-09-2005")
public void mymethod() {
....
}
定義Java註解類型的注意事項
定義註解類型時需要注意:
1.註解聲明應該以一個at符號開始(@),後面跟著一個interface 關鍵字,以及註解的名字.
2.註解裡面的方法宣告,不接受任何參數(只是看起來像是方法而已,本質是屬性域).
3.註解裡面的方法聲明不能有throws 子句.
4.註解裡面的方法回傳類型只能是下面這幾種:
@primitives(6種原始資料型態,int,byte等)
@String(字串)
@Class(類別, 如String.class 這種)
@enum(枚舉)
@array of the above types(數組,數組元素只能是上面的一種類型)
Java註解類型
JDK5中有兩種類型的註解:
1.Simple annotations(簡單註解類型): 這些是Tiger(Tiger是JDK1.5的代號?)提供的基本類型,只能用來註解普通代碼;不能用來創建另一個自定義註解類型.
2.Meta annotations(元註解): 專門設計用來註解其他註解類型(annotation-type)聲明的. 簡單地說,他們被稱為註解的註解(annotations-of-annotations).