Java 中的註解符號@

Bishal Awasthi 2023年10月12日
  1. Java 中的@Override 註解
  2. Java 中的@SuppressWarnings 註解
  3. Java 中的@Deprecated 註解
Java 中的註解符號@

本文將介紹@符號,在 Java 中稱為註解。我們將專注於內建 Java 註釋,如 @Override@SuppressWarnings@Deprecated

Java 中的@Override 註解

在 Java 中,註解是一種表示附加在類、介面和方法上的額外資訊的方式。Java 編譯器和 JVM 使用提供的資訊和註解。註釋以@ 符號開頭。@Override 註釋確保子類方法覆蓋父類方法。它是一個標記註釋,因為它沒有任何值或元素。當我們使用 @Override 註釋時,編譯器將生成錯誤並警告我們,如果在覆蓋該方法時出現任何錯誤。它檢查的可能錯誤是拼寫錯誤以及引數和返回型別的錯誤。我們可以通過建立繼承來演示 @Override 註釋的使用。首先,我們不會使用註釋,但稍後我們將使用它來演示@Override 的工作原理。

例如,建立一個類 Parent 並編寫一個具有 void 返回型別的方法 message()。在方法內列印一些訊息。同樣,建立另一個類 Child,並擴充套件類 Parent。使用 void 型別建立相同的方法 message 並在其中寫入一條訊息。在方法之前,寫上註釋@Override。然後,在主類中,建立每個類的物件並呼叫 message() 方法。

在這裡,子類繼承了超類,每個類中的每個方法都可以毫無問題地呼叫。

示例程式碼:

class Annotation {
  public static void main(String[] args) {
    new Child().message();
    new Parent().message();
  }
}

class Parent {
  void message() {
    System.out.println("Invoked from the Parent class");
  }
}

class Child extends Parent {
  @Override
  void message() {
    System.out.println("Invoked from the Child class");
  }
}

輸出:

Invoked from the Child class
Invoked from the Parent class

Child 類中的 message() 方法修改為 mesage()。然後,執行程式。它顯示了以下輸出。

輸出:

Annotation.java:18: error: method does not override or implement a method from a supertype

在這裡,我們更改了方法名稱。有時,程式設計師在覆蓋時可能會犯這種型別的錯誤。因此,@Override 註釋可確保在覆蓋方法時出現任何錯誤並提醒程式設計師。

Java 中的@SuppressWarnings 註解

@SuppressWarnings 註釋告訴編譯器抑制或忽略指定程式碼段的錯誤。我們可以將註解用於型別、欄位、方法、引數、建構函式和區域性變數。我們可以將註釋括號之間的值 unchecked 指定為 @SuppressWarnings("unchecked") 以抑制錯誤。當我們在類之前使用註解時,它將抑制類內部的任何錯誤。當我們在類中的任何方法之前使用它時,它只會抑制來自該特定類的錯誤。

例如,匯入 util 包並建立一個名為 Annotation 的類。在 main 方法之前寫上@SuppressWarnings("unchecked")。在 main 方法中,建立 ArrayList() 的例項並將其分配給 fruits 變數。然後,使用 add() 方法新增值 applemango。最後,列印 fruits 變數。

在下面的示例中,我們從 util 包中匯入了所有內容。它匯入了我們之後使用的 ArrayList 類。上面的程式碼成功執行,雖然有錯誤。我們使用了非泛型集合 ArrayList。我們沒有在 <> 符號內指定型別。因此,程式碼是錯誤的。但它會執行,因為我們使用@SuppressWarnings 註釋抑制了錯誤。

示例程式碼:

import java.util.*;
class Annotation {
  @SuppressWarnings("unchecked")
  public static void main(String args[]) {
    ArrayList fruits = new ArrayList();
    fruits.add("apple");
    fruits.add("mango");
    System.out.println(fruits);
  }
}

輸出:

[apple, mango]

如果我們對下面的程式碼不使用註解,編譯器會顯示如下錯誤。

輸出:

Note: Annotation.java uses unchecked or unsafe operations.

Java 中的@Deprecated 註解

@Deprecated 註釋用於將指定的程式碼段表示為不推薦使用的程式碼。當我們使用註釋時,編譯器會顯示棄用警告。我們可以使用 @Deprecated 註釋來註釋型別、方法、欄位和建構函式。

例如,建立一個類 Car 並建立一個帶有引數 colorlengthwidth 的建構函式。在建構函式之前使用 @Deprecated 註釋。讓身體空著。建立另一個建構函式並在其中寫入字串引數 name。建立另一個類 Annotation,並在 main 方法中呼叫這兩個建構函式。

在下面的示例中,我們在第一個建構函式之前使用了 @Deprecated 註釋。它使編譯器能夠生成警告,指出建構函式已被棄用。通過這種方式,我們可以使用註釋來指定程式碼中不推薦使用的內容。不鼓勵刪除已棄用的程式碼,因為它可用於在需要時回滾到以前的版本。鼓勵在這種情況下使用新的替代方案。

示例程式碼:

class Annotation {
  public static void main(String args[]) {
    new Car("red", 550, 300);
    new Car("Lambo");
  }
}
class Car {
  @Deprecated
  Car(String color, int length, int width) {}
  Car(String name) {}
}

輸出:

Note: Annotation.java uses or overrides a deprecated API.