Java 注釋用法

2018-01-19 11:50 更新

Java面向?qū)ο笤O(shè)計(jì) - Java注釋用法


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

原始類型

注釋類型中的元素的數(shù)據(jù)類型可以是任何基本數(shù)據(jù)類型:byte,short,int,long,float,double,boolean和char。

Version注釋類型聲明兩個(gè)元素,major和minor,并且都是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á)式來(lái)指定注釋元素的值。

以下兩個(gè)版本注釋實(shí)例有效:

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

String類型

我們可以在注釋類型中使用String類型的元素。

以下代碼定義了名為Name的注釋類型。它有兩個(gè)元素,first和last,它們是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類型

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

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 {

}

注釋類型

我們可以使用注釋類型作為另一個(gè)注釋類型的聲明內(nèi)的元素的類型。

要為注釋類型的元素提供值,請(qǐng)使用用于創(chuàng)建注釋類型實(shí)例的語(yǔ)法。

@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ù)組類型的元素。數(shù)組類型可以是以下類型之一:

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

我們需要在大括號(hào)中指定數(shù)組元素的值。

數(shù)組的元素由逗號(hào)分隔。

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

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

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

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

傳遞一個(gè)空數(shù)組

@ToDo(items={}) 

速記注釋語(yǔ)法

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

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

要使用帶有默認(rèn)值的Enabled注釋類型注釋程序元素,我們可以使用@Enabled()語(yǔ)法。

我們不需要為status元素指定值,因?yàn)樗哂心J(rèn)值。

我們可以進(jìn)一步省略括號(hào)。

@Enabled
public class Main {

}

@Enabled()
public class Main {

}

只有一個(gè)元素的注釋類型具有速記語(yǔ)法。

如果注釋類型只有一個(gè)具有命名值的元素,我們可以省略name = value對(duì)中的名稱。

以下代碼聲明了公司注釋類型,它只有一個(gè)名為value的元素:

public  @interface Company  {
    String value(); 
}

當(dāng)使用公司注釋時(shí),我們可以省略name = value對(duì)的名稱。

@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   {
}

如果我們?cè)跀?shù)組注釋類型中只指定一個(gè)元素,我們可以進(jìn)一步省略大括號(hào)。

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

如果我們?cè)跀?shù)組注釋類型中只指定一個(gè)元素,我們可以進(jìn)一步省略大括號(hào)。

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)