1. 程式人生 > >詳解Java中的註解

詳解Java中的註解

在Java中,註解(Annotation)引入始於Java5,用來描述Java程式碼的元資訊,通常情況下註解不會直接影響程式碼的執行,儘管有些註解可以用來做到影響程式碼執行。

註解可以做什麼

Java中的註解通常扮演以下角色

  • 編譯器指令
  • 構建時指令
  • 執行時指令

其中

  • Java內建了三種編譯器指令,本文後面部分會重點介紹
  • Java註解可以應用在構建時,即當你構建你的專案時。構建過程包括生成原始碼,編譯原始碼,生成xml檔案,打包編譯的原始碼和檔案到JAR包等。軟體的構建通常使用諸如Apache Ant和Maven這種工具自動完成。這些構建工具會依照特定的註解掃描Java程式碼,然後根據這些註解生成原始碼或檔案。
  • 通常情況下,註解並不會出現在編譯後的程式碼中,但是如果想要出現也是可以的。Java支援執行時的註解,使用Java的反射我們可以訪問到這些註解,執行時的註解的目的通常是提供給程式和第三方API一些指令。

註解基礎

一個簡單的Java註解類似與@Entity。其中@的意思是告訴編譯器這是一個註解。而Entity則是註解的名字。通常在檔案中,寫法如下

1
2
public @interface Entity { 
}

註解元素

Java註解可以使用元素來進行設定一些值,註解中的元素類似於屬性或者引數。定義包含元素的註解示例程式碼

1
2
3
public @interface Entity { 
  String tableName();
}

使用包含元素的註解示例程式碼

1
@Entity(tableName = "vehicles")

上述註解的元素名稱為tableName,設定的值為vehicles。沒有元素的註解不需要使用括號。

如果註解包含多個元素,使用方法如下

1
@Entity(tableName = "vehicles", primaryKey
= "id")

如果註解只有一個元素,通常我們的寫法是這樣的

1
@InsertNew(value = "yes")

但是這種情況下,當且僅當元素名為value,我們也可以簡寫,即不需要填寫元素名value,效果如下

1
@InsertNew("yes")

註解使用

註解可以用來修飾程式碼中的這些元素

  • 介面
  • 方法
  • 方法引數
  • 屬性
  • 區域性變數

一個完整的使用示例如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
@Entity
public class Vehicle {
    @Persistent
    protected String vehicleName = null;
    @Getter
    public String getVehicleName() {
        return this.vehicleName;
    }
    public void setVehicleName(@Optional vehicleName) {
        this.vehicleName = vehicleName;
    }
    public List addVehicleNameToList(List names) {
        @Optional
        List localNames = names;
        if(localNames == null) {
            localNames = new ArrayList();
        }
        localNames.add(getVehicleName());
        return