鍍金池/ 教程/ Java/ Java注解用法
Java參數(shù)傳遞
Java靜態(tài)內(nèi)部類
Java final關(guān)鍵字
http://www.yiibai.com/java_object_oriented_design/java_inheritan
Java泛型類
Java標(biāo)準(zhǔn)注解
Java接口教程
Java注解
Java枚舉類型
http://www.yiibai.com/java_object_oriented_design/java_class_ins
Java接口實(shí)現(xiàn)
Java哈希編碼
Java泛型約束
http://www.yiibai.com/java_object_oriented_design/java_import.ht
Java注解默認(rèn)值
Java異常拋出
Java不可變對象
Java類基礎(chǔ)
Java接口繼承
Java類方法
Java訪問級別
Java對象克隆
Java初始化塊
Java可變長度參數(shù)
Java接口字段
Java對象相等比較(Equals)
Java實(shí)例和靜態(tài)方法
Java繼承方法隱藏(覆蓋)
Java面向?qū)ο笤O(shè)計(jì)
Java對象finalize()方法
Java抽象類和方法
Java Object類
Java泛型方法和構(gòu)造函數(shù)
Java枚舉體
Java接口方法
Java this關(guān)鍵字
Java注解類型的限制
Java main()方法
Java Enum類
Java注解用法
Java枚舉比較
Java注解類型
Java內(nèi)部類成員
Java繼承和構(gòu)造函數(shù)
Java類實(shí)例化
Java內(nèi)部類類型
Java對象toString()方法
Java finally塊
Java繼承教程
Java自定義異常
Java枚舉值
Java接口作為類型
Java異常類
Java方法覆蓋教程
http://www.yiibai.com/java_object_oriented_design/java_class_bas
Java枚舉方法
Java方法重載
http://www.yiibai.com/java_object_oriented_design/java_interface
Java異常用法
Java內(nèi)部類
Java類成員訪問級別
Java異常處理教程
Java注解反射
Java構(gòu)造函數(shù)(構(gòu)造器)
Java導(dǎo)入(import語句的用法)

Java注解用法

Java注解用法

注解元素的提供值必須是編譯時(shí)常量表達(dá)式,不能使用null作為注解中任何類型元素的值。

基本類型

注解類型中的元素的數(shù)據(jù)類型可以是任何基本數(shù)據(jù)類型:byte,shortint,longfloat,double,booleanchar

Version注釋類型聲明兩個元素:majorminor,并且都是int數(shù)據(jù)類型。

以下代碼聲明了注解類型:

public @interface MyAnnotation {
  byte a();

  short b();

  int c();

  long d();

  float e();

  double f();

  boolean g();

  char h();
}
@MyAnnotation(a=1, b=2,  c=3,  d=4,  e=12.34F, f=1.89, g=true, h='Y')

可以使用編譯時(shí)常量表達(dá)式來指定注解元素的值。以下兩個版本注釋實(shí)例有效的:

@Version(major=2+1, minor=(int)13.2)
@Version(major=3, minor=13)

字符串類型

可以在注釋類型中使用String類型的元素。以下代碼定義了名為Name的注解類型。 它有兩個元素:firstlast,它們都是String類型。

public @interface Name  { 
   String first(); 
   String last();
}

@Name(first="Tom", last="Smith")
public class NameTest {
    @Name(first="Jack", last="Iaan")
    public void  aMethod()   {
    }
}

String類型的元素的值表達(dá)式中使用字符串連接+運(yùn)算符是有效的。

@Name(first="Ja" + "ck", last="Ia" + "an")

Class類型

以下代碼顯示如何使用Class類型作為注解值。

import java.io.IOException;

@interface MyAnnotation {
  Class<? extends Throwable> willThrow() default java.lang.Throwable.class;
}

public class Main {
  @MyAnnotation(willThrow = IOException.class)
  public static void testCase1() {
    // Code goes here
  }

  @MyAnnotation()
  public static void testCase2() {
  }
}

枚舉類型

注解可以具有枚舉類型的元素。

enum Level {
  PENDING, FAILED, PASSED;
}

@interface Review {
  Level status() default Level.PENDING;

  String comments() default "";
}

@Review(status = Level.PASSED)
public class Main {

}

注解類型

可以使用注解類型作為另一個注解類型的聲明內(nèi)的元素的類型。要為注解類型的元素提供值,請使用用于創(chuàng)建注解類型實(shí)例的語法。

@interface Name {
  String first();

  String last();
}

@interface Version {
  int major();

  int minor() default 0; // zero as default value for minor
}

@interface Description {
  Name name();

  Version version();

  String comments() default "";
}

@Description(name = @Name(first = "Tom", last = "Smith"), version = @Version(major = 1, minor = 2), comments = "Just a  test class")
public class Main {

}

注解可以具有數(shù)組類型的元素。數(shù)組類型可以是以下類型之一:

  • 原始類型
  • java.lang.String類型
  • java.lang.Class類型
  • 枚舉類型
  • 注解類型

需要在大括號中指定數(shù)組元素的值。數(shù)組的元素由逗號分隔。

@interface ItemList {
  String[] items();
}

@ItemList(items = { "A", "B" })
public class Main {

}

如果數(shù)組中只有一個元素,則允許省略括號。

@ToDo(items={"A"})
@ToDo(items="A")

傳遞一個空數(shù)組

@ToDo(items={})

速記注解語法

假設(shè)有一個注釋類型如下。

public  @interface Enabled  {
    boolean status() default true;
}

要使用帶有默認(rèn)值的Enabled注解類型注釋程序元素,可以使用@Enabled()語法。
不需要為status元素指定值,因?yàn)樗哂心J(rèn)值??梢赃M(jìn)一步省略括號。

@Enabled
public class Main {

}

@Enabled()
public class Main {

}

只有一個元素的注解類型有速記語法。如果注釋類型只有一個具有命名值的元素,可以省略name = value對中的名稱。以下代碼聲明了 Company 注解類型,它只有一個名為value的元素:

public  @interface Company  {
    String value(); 
}

當(dāng)使用 Company 注釋時(shí),可以省略name = value對的名稱。

@Company(value="Inc.")
public class Test   {
}

變成 -

@Company("Inc.")
public class Test   {
}

以下代碼顯示了如果元素?cái)?shù)據(jù)類型是數(shù)組,如何使用縮寫。

public  @interface Item   {
    String[] value();
}

@Item({"A", "B"})
public class Test   {
}

如果在數(shù)組注釋類型中只指定一個元素,可以進(jìn)一步省略括號。

@Item("A")
public class Test   {
}

如果在使用注釋時(shí)只提供一個值,則元素的名稱為假設(shè)那個值。


下一篇:Java接口字段