天天看點

java annoation 注解 詳解

注釋有3中基本類型

a.标記注釋 --沒有變量,隻有名稱辨別。例如 @annotation

b.單一值注釋 --在标記注釋的基礎上提供一段資料。如 @annotation(“data”)

c.完整注釋 --可以包括多個資料成員,每個資料成員由名稱和值構成。

@annotation(val1="data1",val2="data2")

2.Java的“注釋”

Java中提供3個内置注釋類型

a. Override ,隻能用于方法(不能用于類,包聲明或者其他構造)

作用:可以保證編譯時候Override函數的聲明正确性

用法:@Override

public void fun(){..}

b.Deprecated 同樣隻能作用與方法

作用:對不應再使用的方法進行注解

用法:@Deprecated public void fun{...} //它們說這個注釋跟函數要同一行

c.SupressWarnings 可以注釋一段代碼

作用:關閉特定的警告資訊,例如你在使用泛型的時候未指定類型

用法: @SupressWarnings(value={"unchecked"})

..代碼

Java中還提供了四種元注釋,專門負責注釋其他的注釋

@Target 表示該注釋可以用于什麼地方。可用的ElementType參數包括:

CONSTRUCTOR : 構造器的聲明

FIELD : 域聲明(包括enum執行個體)

LOCAL_VARIABLE : 局部變量聲明

METHOD : 方法聲明

PACKAGE : 包聲明

PARAMETER : 參數聲明

TYPE : 類、接口 (包括注解類型) 或enum聲明

@Retention 表示需要在什麼級别儲存該注釋資訊。可選的RetentionPoicy參數包括:

SOURCE : 注釋将被編譯器丢掉

CLASS : 注釋在class檔案中可用,但會被VM丢棄

RUNTIME : VM将在運作時也保留注釋,是以可以通過反射機制讀取注釋的資訊。

@Documented 将注釋包含在JavaDoc中

@Inheried 允許子類繼承父類中的注釋。

3. 在Java中定義自己的注釋

Java語言支援一種新的類型--注釋類型(annotation type),跟普通類差不多,在類中以符号( @ )的形式注釋其他 Java 代碼

下面将通過一個簡單的例子來實作(代碼是Brett McLaughlin 的)

@interface 申明

i.簡單的注釋類型

package com.oreilly.tiger.ch06;

public @interface InProgress { }

ii.使用定制的注釋類型

@com.oreilly.tiger.ch06.InProgress

public void calculateInterest(float amout,float rate)

{

//Need to finish this method later

}

iii.添加成員

package com.oreilly.tiger.ch06;

public @interface InProgress {

String value();

}

@com.oreilly.tiger.ch06.InProgress

@TODO("Figure out the amount of interest per month")

//或者@TODO(value="Figure out the amount of interest per month")

public void calculateInterest(float amount,float rate)

{

}

iv.設定預設值

package com.oreilly.tiger.ch06;

public @interface GroupTODO {

public enum Serverity { CRITICAL,IMPORTANT,IRIVIAL,DOCMENTATION };

Severity severity()

default Severity.IMPORTANT;

String item ();

String assignedTo();

String dateAssigned();

}

}

v.使用預設值

@com.oreilly.tiger.ch06.InProgress

@GroupTODO(

item="Figure out the amount of interest per month",

assignedTo = "Brett McLaughlin",

dateAssigned = "08/04/2004"

)

public void calculateInterest(float amount, float rate)

{

//Need to finish this method later

}

vi.改寫預設值

@com.oreilly.tiger.ch06.InProgress

@GroupTODO

{

severity = GroupTODO.Severity.DOCUMENTATION,

item = "Need to explain how this rather unusal method works",

assignedTo = "Jon Stevens",

dateAssigned = "07/30/2004"

}

轉至:http://javaopen.iteye.com/blog/645915