Java註解


Java註解是什麼?

在Java中的註解允許將後設資料與程式元素相關聯。
程式元素可以是包,類,介面,類的欄位,區域性變數,方法,方法的引數,列舉,註解,通用型別/方法宣告中的型別引數等等。

可以在Java程式中注解任何宣告或型別。註解在任何其他修飾符(public,private,final,static等)的程式元素的宣告中用作修飾符。與修飾符不同,註解不會修改程式元素的含義。它是程式元素的注解。

宣告註解型別

宣告註解型別類似於宣告介面型別。註解型別是一種特殊型別的介面型別。使用前面帶有@符號的interface關鍵字來宣告註解型別(注意與宣告介面的區別)。
以下是宣告註解型別的一般語法:

<modifiers> @interface <annotation-type-name>  {
    // Annotation type body
}

註解宣告的<modifiers>修辭符與介面宣告的相同。可以將註解型別宣告為public或package級別。@符號與interface關鍵字之間可以用空格分隔,也可以連線在一起。按照慣例,它們一般是連線放在一起,如:@interface。interface關鍵字後面是註解型別名稱。 它應該是有效的Java識別符號。

註解型別正文放在大括號中。以下程式碼建立註解以使用版本資訊註解程式元素。

public  @interface  Version {
    int  major();
    int  minor();
}

在上面程式碼中的Version註解型別中宣告了兩個抽象方法:major()和minor()。註解型別中的抽象方法稱為元素。註解可以宣告零個或多個元素,它們被宣告為抽象方法。抽象方法名稱是註解型別的元素的名稱。
在上面的程式碼中,Version註解型別宣告了兩個元素:major和minor。 兩個元素的資料型別都是int。

如果要匯入一個註解型別,那麼它應該就像匯入任何其他型別一樣。

註解範例

要建立註解型別的範例並使用它來註解程式元素,使用以下語法:

@annotationType(name1=value1,  name2=value2, names3=values3...)

註解型別前面帶有一個@符號,後面是用括號括起來的逗號分隔的name = value對列表。name = value對中的名稱是在註解型別中宣告的元素的名稱和值,它由使用者提供。name = value對不必按照在註釋型別中宣告的順序出現。
以下程式碼使用Version型別的註解,主要元素值設定為1(major=1),次要元素值設定為0(minor=0)。

@Version(major=1, minor=0)

也可以使用注釋型別的完全限定名,如下程式碼 -

@com.java2s.annotation.Version(major=0,  minor=1)

可以將類宣告註釋為 -

@Version(major=1, minor=0)
public  class  VersionTest {

}

可以將程式元素的注釋與其他修飾符混合使用。

@Version(major=1, minor=0)  public  class  VersionTest {
}

public  @Version(major=1, minor=0)  class  VersionTest {
}

完整的原始碼

@interface Version {
  int major();

  int minor();
}

@Version(major = 1, minor = 0)
public class Main {
  @Version(major = 1, minor = 1)
  private int xyz = 110;

  @Version(major = 1, minor = 0)
  public Main() {
  }

  @Version(major = 1, minor = 1)
  public Main(int xyz) {
    this.xyz = xyz;
  }

  @Version(major = 1, minor = 0)
  public void printData() {
  }

  @Version(major = 1, minor = 1)
  public void setXyz(int xyz) {

    @Version(major = 1, minor = 2)
    int newValue = xyz;

    this.xyz = xyz;
  }
}