說起注解語法,對(duì)于任何一個(gè)java開發(fā)人員來說都已經(jīng)耳熟能詳了,我們天天都在使用著 @author, @param,等等編寫注釋,然后用javadoc生成文檔。Java的這種方便的文檔生成方法受到了開發(fā)者的普遍贊譽(yù)。而從JDK1.5開始,注釋語法提供了更為強(qiáng)大的功能。 Child.java:3: method does not override a method from its superclass
我們先談?wù)勛⑨屨Z法本身,它有時(shí)候也稱為meta-data :“描述數(shù)據(jù)的數(shù)據(jù)”。一般來說它們可以被用來生成文檔,檢查代碼間依靠關(guān)系,幫助編譯器作語法檢查。時(shí)下比較流行的工具有Xdoclet等。對(duì)于文檔生成早已經(jīng)有了javadoc工具的完美表現(xiàn),而對(duì)于代碼檢查,如今java也提供了語言級(jí)的支持。
我們知道,javadoc是通過提取java源文件中的標(biāo)簽信息來生成文檔。所以要學(xué)習(xí)新的注釋語法,們首先要熟悉的就是新增的標(biāo)簽。新的注釋語法支持兩種標(biāo)簽,系統(tǒng)標(biāo)準(zhǔn)標(biāo)簽和用戶自定義標(biāo)簽。標(biāo)簽的符號(hào)也原先一樣,@符號(hào)加上標(biāo)簽名字。我們先從JDK1.5自帶的標(biāo)準(zhǔn)標(biāo)簽說起。
首先介紹@override , 也不用多羅嗦,顧名思義了,就是用來說明方法覆載的。我們假設(shè)有一個(gè)子類必須要覆載父類的方法.
================================================================================
public class Parent{
public void foo(){
System.out.
}
}
public class Child extends Parent{
@Override
public void foo(){
System.out.println("Overide Implementation of foo");
}
<}
================================================================================
目前為止我們看不出來這個(gè)@Override給我們帶來了任何好處,所以我們先說說加個(gè)這個(gè)標(biāo)簽后,我們用javac編譯的時(shí)候編譯器執(zhí)行了些什么呢?編譯器會(huì)檢查這個(gè)方法,然后從父類查找是否有這個(gè)方法,否則就編譯出錯(cuò)。這個(gè)特性可以幫助我們避免一些低級(jí)錯(cuò)誤。上面這個(gè)例子,子類想覆載foo()方法,不過你可能一時(shí)疏忽把它寫成了fob(), 對(duì)于這樣的”低級(jí)錯(cuò)誤”,假如你沒有在前期就發(fā)現(xiàn)的話,到系統(tǒng)集成測(cè)試的時(shí)候,可能會(huì)化上你幾個(gè)小時(shí)甚至一兩天去找出這樣的bug。現(xiàn)在好了,編譯器在編譯的時(shí)候就會(huì)給出錯(cuò)誤,
@Override
^
1 error
這個(gè)功能還不錯(cuò)吧。
看過了標(biāo)準(zhǔn)標(biāo)簽的使用方法,我們來看看用戶自定義標(biāo)簽。首先介紹@interface, 它用于定義新的注釋類型(annotation type)。新建一個(gè)注釋類型看起來和定義一Interface 沒有什么兩樣,MyTag.Java用于新建一個(gè)用戶自定義標(biāo)簽,代碼如下,
===============================================================================
package tiger.annotation;
/**
* 用戶自定義標(biāo)簽??MyTag
*/
public @interface MyTag { }
定義了一個(gè)tag之后,我們就可以在任何java文件中使用這個(gè)tag了,
import tiger.annotation.MyTag;
public class TagTest{
@MyTag
public void testTag(){
}
}
===============================================================================
注釋類型還可以有成員變量,
==============================================================================
package tiger.annotation;
/**
* 用戶自定義標(biāo)簽??帶有成員變量的MyTag
*/
public @interface MyTag {
String name();
int age();
}
=============================================================================
然后我們可以這么使用這個(gè)標(biāo)簽,
@MyTag(name="MyTag",age=1)
public void testTag(){
}
使用標(biāo)簽最終是為了幫助開發(fā)人員提取注釋信息,然后根據(jù)不同需求做進(jìn)一步處理,下面我們來看看如何獲取注釋信息。
=============================================================================
import java.lang.annotation.Annotation;
import tiger.annotation.MyTag;
public class TagTest{
@MyTag(name="MyTag",age=1)
public void test(){
}
public static void main(String[] args){
TagTest tt = new TagTest();
try {
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注