Trong hướng dẫn này, chúng ta sẽ tìm hiểu chú thích là gì, các chú thích Java khác nhau và cách sử dụng chúng với sự trợ giúp của các ví dụ.

Chú thích(Annotations) trong Java là siêu dữ liệu (dữ liệu về dữ liệu) cho mã nguồn chương trình của chúng ta.

Chúng cung cấp thông tin bổ sung về chương trình cho trình biên dịch nhưng không phải là một phần của chính chương trình. Các chú thích này không ảnh hưởng đến việc thực thi chương trình đã biên dịch.

Chú thích bắt đầu bằng @. Cú pháp của nó là:

@AnnotationName

Hãy lấy một ví dụ về chú thích @Override.

Các @Override quy định cụ thể chú thích rằng phương thức đó đã được đánh dấu với chú thích này sẽ ghi đè phương thức của lớp cha có cùng tên phương pháp, kiểu trả về, và danh sách tham số.

Nó không bắt buộc phải sử dụng @Override khi ghi đè một phương thức. Tuy nhiên, nếu chúng ta sử dụng nó, trình biên dịch sẽ báo lỗi nếu có gì đó sai (chẳng hạn như kiểu tham số sai) trong khi ghi đè phương thức.

Ví dụ 1: Ví dụ về chú thích @Override

class Animal {
  public void displayInfo() {
    System.out.println("I am an animal.");
  }
}

class Dog extends Animal {
  @Override
  public void displayInfo() {
    System.out.println("I am a dog.");
  }
}

class Main {
  public static void main(String[] args) {
    Dog d1 = new Dog();
    d1.displayInfo();
  }
}

Đầu ra

I am a dog.

Trong ví dụ này, phương thức displayInfo() hiện diện trong cả lớp cha Động vật và lớp con Dog. Khi phương thức này được gọi, phương thức của lớp con được gọi thay vì phương thức trong lớp cha.

1. Các loại chú thích

Chú thích cũng có thể bao gồm các phần tử (thành viên / thuộc tính / tham số).

1.1. Chú thích điểm đánh dấu

Chú thích điểm đánh dấu không chứa thành viên / phần tử. Nó chỉ được sử dụng để đánh dấu một câu lệnh.

Cú pháp của nó là:

@AnnotationName ()

Vì các chú thích này không chứa phần tử, nên có thể loại trừ dấu ngoặc đơn. Ví dụ,

@Override

1.2. Chú thích một phần tử

Một chú thích phần tử chỉ chứa một phần tử.

Cú pháp của nó là:

@AnnotationName (elementName = “elementValue”)

Nếu chỉ có một phần tử, quy ước đặt tên phần tử đó là giá trị.

@AnnotationName (value = “elementValue”)

Trong trường hợp này, tên phần tử cũng có thể bị loại trừ. Tên phần tử sẽ là giá trị theo mặc định.

@AnnotationName("elementValue")

1.3. Nhiều chú thích phần tử

Các chú thích này chứa nhiều phần tử được phân tách bằng dấu phẩy.

Cú pháp của nó là:

@AnnotationName(element1 = "value1", element2 = "value2")

2. Vị trí chú thích

Bất kỳ khai báo nào cũng có thể được đánh dấu bằng chú thích bằng cách đặt nó bên trên khai báo đó. Đối với Java 8, chú thích cũng có thể được đặt trước một kiểu.

2.1. Khai báo trên

Như đã đề cập ở trên, các chú thích Java có thể được đặt bên trên lớp, phương thức, giao diện, trường và các khai báo phần tử chương trình khác.

Ví dụ 2: Ví dụ về chú thích @SuppressWarnings

/*
Cafedev.vn - Kênh thông tin IT hàng đầu Việt Nam
@author cafedevn
Contact: cafedevn@gmail.com
Fanpage: https://www.facebook.com/cafedevn
Group: https://www.facebook.com/groups/cafedev.vn/
Instagram: https://instagram.com/cafedevn
Twitter: https://twitter.com/CafedeVn
Linkedin: https://www.linkedin.com/in/cafe-dev-407054199/
Pinterest: https://www.pinterest.com/cafedevvn/
YouTube: https://www.youtube.com/channel/UCE7zpY_SlHGEgo67pHxqIoA/
*/

import java.util.*;

class Main {
  @SuppressWarnings("unchecked")
  static void wordsList() {
    ArrayList wordList = new ArrayList<>();

// This causes an unchecked warning
    wordList.add("cafedev"); 

    System.out.println("Word list => " + wordList);
  }

  public static void main(String args[]) {
    wordsList();
  }
}

Đầu ra

Word list => [cafedev]

Nếu chương trình trên được biên dịch mà không sử dụng chú thích@SuppressWarnings(“unchecked”), trình biên dịch sẽ vẫn biên dịch chương trình nhưng nó sẽ đưa ra các cảnh báo như:

Main.java uses unchecked or unsafe operations.
Word list => [cafedev]

Chúng ta đang nhận được cảnh báo

Main.java uses unchecked or unsafe operations

vì câu lệnh sau.

ArrayList wordList = new ArrayList<>();

Điều này là do chúng ta chưa xác định kiểu chung của danh sách mảng. Chúng tôi có thể khắc phục cảnh báo này bằng cách chỉ định các số liệu chung bên trong dấu ngoặc nhọn <>.

ArrayList<String> wordList = new ArrayList<>();

2.2 Nhập chú thích

Trước Java 8, chú thích chỉ có thể được áp dụng cho các khai báo. Bây giờ, chú thích kiểu cũng có thể được sử dụng. Điều này có nghĩa là chúng ta có thể đặt chú thích ở bất cứ nơi nào chúng ta sử dụng một kiểu.

Lời gọi hàm tạo

new @Readonly ArrayList<>()

Kiểu cho định nghĩa

@NonNull String str;

Khai báo này chỉ định biến str không null kiểu String cần tránh NullPointerException.

@NonNull List<String> newList;

Khai báo này chỉ định một kiểu danh sách không rỗng String.

List<@NonNull String> newList;

Khai báo này chỉ định một danh sách các giá trị không null của kiểu String.

Nhập phôi

newStr = (@NonNull String) str;

mở rộng và thực hiện điều khoản

class Warning extends @Localized Message

ném mệnh đề

public String readMethod() throws @Localized IOException

Chú thích kiểu cho phép mã Java được phân tích tốt hơn và cung cấp các kiểm tra kiểu thậm chí còn mạnh hơn.

3. Các kiểu chú thích

1. Chú thích được xác định trước

  1. @Deprecated
  2. @Override
  3. @SuppressWarnings
  4. @SafeVarargs
  5. @FunctionalInterface

2. Chú thích lớn

  1. @Retention
  2. @Documented
  3. @Target
  4. @Inherited
  5. @Repeatable

3. Chú thích tùy chỉnh

Các kiểu chú thích này được mô tả chi tiết trong hướng dẫn Các kiểu chú thích của Java, phần tiếp.

4. Sử dụng chú thích

  • Hướng dẫn trình biên dịch – Chú thích có thể được sử dụng để đưa ra hướng dẫn cho trình biên dịch, phát hiện lỗi hoặc ngăn chặn cảnh báo. Việc xây dựng trong các chú thích @Deprecated, @Override, @SuppressWarningsđược sử dụng cho những mục đích này.
  • Hướng dẫn thời gian biên dịch – Các hướng dẫn về thời gian biên dịch được cung cấp bởi các chú thích này giúp phần mềm xây dựng các công cụ để tạo mã, tệp XML và nhiều thứ khác.
  • Hướng dẫn thời gian chạy – Một số chú thích có thể được xác định để cung cấp hướng dẫn cho chương trình trong thời gian chạy. Các chú thích này được truy cập bằng Java Reflection.

Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.

Nguồn và Tài liệu tiếng anh tham khảo:

Tài liệu từ cafedev:

Đăng ký kênh youtube để ủng hộ Cafedev nha các bạn, Thanks you!