Annotation Trong Java Là Gì Và Chức Năng Của Nó?

Trong quy trình học lập trình Java cơ bản, chúng ta có thể bắt gặp những ký hiệu như @Override, @Deprecated, @SuppressWarnings,…Vậy chúng là gì trong Java và chức năng của nó là gì? Cùng mình tìm hiểu trong bài viết “Tìm hiểu về Annotation trong Java” này nhé.

Trong bài viết này, mình chia sẻ về Annotation trong Java qua những nội dung sau:

  1. Annotation trong Java là gì?
  2. Cấu trúc của 1 Annotation trong Java.
  3. Chức năng của Annotation trong Java.
  4. Những Annotation tích hợp sẵn trong Java.
  5. Khởi tạo Annotation (Annotation tự động định nghĩa).
  6. Annotation lồng nhau và phương pháp dùng.
  7. Tổng kết.

1. Annotation trong Java là gì?

Annotation được hiểu là 1 dạng chú thích hoặc 1 dạng siêu dữ liệu (metadata) được dùng để phân phối thông tin dữ liệu cho mã nguồn Java. Những chú thích ko có tác động quản lý tới hoạt động của mã mà chúng chú thích. Annotation được thêm vào Java từ Java 5. Những Annotation được dùng trong mã nguồn sẽ được biên dịch thành bytecode và dùng kỹ thuật phản chiếu (Reflection) để truy vấn thông tin siêu dữ liệu và đưa ra hành động thích hợp.Chúng ta có thể chú thích những lớp (class), phương thức (technique), những biến (variable), những gói (bundle) và những tham số (prameter) trong Java.

Java Annotation có 2 loại:

  • Những Annotation được tích hợp sẵn.
  • Annotation do khách hàng tự động định nghĩa.

2. Cấu trúc của 1 Annotation trong Java

1 chú thích luôn khởi đầu sở hữu ký hiệu @ và tiếp theo là tên của chú thích. Ký hiệu @ chỉ ra cho trình biên dịch rằng đây là 1 chú thích.

Thí dụ: @Deprecated

  • Ký hiệu @ mô tả đây là 1 chú thích.
  • Deprecated là tên của chú thích.

3. Chức năng của Annotation trong Java

Annotation được dùng trong Java cho 3 phần đích chính:

Thứ 1, chỉ dẫn cho trình biên dịch (Compiler)

Chú thích có thể được trình biên dịch dùng để tìm ra lỗi hoặc triệt tiêu những cảnh báo. Java có 3 Annotation có thể được dùng nhằm phân phối chỉ dẫn cho trình biên dịch:

1. @Deprecated

2. @Override

3. @SuppressWarnings

Chi tiết về từng chú thích sẽ được giải thích chi tiết trong phần sau.

Xem Thêm  Tuổi Kim Nhiều ngày là gì? Tính tuổi Kim Nhiều ngày và bí quyết hóa giải

Thứ 2, chỉ dẫn trong thời điểm biên dịch (Construct-time)

Những công cụ phần mềm có thể thông qua những chỉ dẫn của chú thích để tạo mã nguồn, tệp XML, nén mã biên dịch và những tâp tin vào 1 tập tin, v…v

Thứ cha, chỉ dẫn trong thời kì chạy (Runtime)

Thông thường, những Annotation ko có mặt trong mã Java sau khoản thời gian biên dịch. Tuy nhiên, có thể xác định trong thời kì chạy bằng phương pháp dùng kỹ thuật Reflection và có thể dùng để đưa ra những chỉ dẫn cho chương trình trong thời kì chạy.

4. Những Annotation tích hợp sẵn trong Java và dí dụ minh họa

Annotation tích hợp sẵn có 2 loại:

1. Java Annotation được tích hợp để dùng quản lý trong code Java:

Chúng ta có 3 Annotation quan yếu:

  • @Override:

    Được dùng cho những phương thức có nghĩa là ghi đè 1 phương thức trong lớp cha (supperclass). Giả dụ 1 phương thức đánh dấu @Override ko ghi đè chính xác 1 phương thức trong lớp cha của nó hay hiểu đơn giản là phương thức ấy ko hợp lệ thì trình biên dịch sẽ báo lỗi. Chúng ta ko nhất thiết bắt buộc dùng @Override lúc ghi đè phương thức, nhưng Annotation này sẽ giúp chúng ta hạn chế lỗi dễ dàng hơn.

    Thí dụ:

public class superExampleNMD { public void methodOverride() { sentayho.com.vntln(“SupperClass Nguyen Minh Duc”); } } public class ExampleNMD extends superExampleNMD{ @Override public void methodOverride() { sentayho.com.vntln(“SubClass Nguyen Minh Duc”); } } public class MainNMD { public static void most important(String[] args) { ExampleNMD ex = new ExampleNMD(); ex.methodOverride(); } }

Kết quả:

Chúng ta có thể thấy rằng phương thức trên lớp con đã ghi đè nội dung lên phương thức của lớp cha.

  • @Deprecated

Được dùng để dánh dấu 1 đối tượng (class, technique hoặc subject) và chỉ dẫn rằng nó phải chăng nhất ko nên được dùng nữa. Trình biên dịch sẽ đưa những câu cảnh báo lúc chương trình dùng những thuộc tính, lớp hoặc phương thức có gắn sở hữu @Deprecated.

Thí dụ:

  • @SuppressWarnings

Thông tin cho trình biên dịch biết là ko được in những câu cảnh báo nào ấy.

Cú pháp dùng: @SuppressWarnings(“…”) hoặc @SuppressWarnings({“…”,”…”,v…v…}) trong “…” được hiểu là tên những loại cảnh báo.

Xem Thêm  Chia sẻ Phương pháp dịch tiếng Trung bằng hình ảnh chính xác nhất

Chúng ta thường dùng:

@SuppressWarnings(“deprecation”) để thông tin trình biên dịch ko cảnh báo việc dùng phương thức có dùng @Deprecated.

@SuppressWarnings(“unchecked”) để thông tin trình biên dịch ko cảnh báo việc sử 1 ép kiểu ko an toàn.

@SuppressWarnings(“rawtypes”) để thông tin trình biên dịch ko cảnh báo lỗi trong khai báo kiểu dữ liệu.

Thí dụ:

2. Java Annotation được tích hợp sẵn được dùng trong Annotation khác.

  • @Goal: Dùng để chú thích phạm vi dùng của 1 Annotation. Những chú thích này đã được định nghĩa trong enum sentayho.com.vnentType:

sentayho.com.vn

Chú thích trên Class, interface, enum, annotation

ElementType.FIELD

Chú thích trường (subject), bao gồm cả những hằng số enum.

ElementType.METHOD

Chú thích trên technique.

ElementType.PARAMETER

Chú thích trên parameter.

ElementType.CONSTRUCTOR

Chú thích trên constructor.

ElementType.LOCAL_VARIABLE

Chú thích trên biến địa phương.

ElementType.ANNOTATION_TYPE

Chú thích trên Annotation khác.

ElementType.PACKAGE

Chú thích trên bundle.

  • @Retention: Dùng để chú thích mức độ tồn tại của 1 Annotation nào ấy. Cụ thể có 3 mức nhận thức tồn tại của vật được chú thích, và được định nghĩa trong enum sentayho.com.vnntionPolicy:

sentayho.com.vnCE Tồn tại trên mã nguồn, và ko được trình biên dịch nhận ra. sentayho.com.vnS Mức tồn tại được trình biên dịch nhận ra, nhưng ko được nhận biết bởi máy ảo tại thời điểm chạy (Runtime). sentayho.com.vnIME Mức tồn tại lớn nhất, được trình biên dịch nhận biết, và máy ảo (JVM) cũng nhận ra lúc chạy chương trình.

  • @Inherited: Chú thích này chỉ ra rằng chú thích new nên được bao gồm trong tài liệu Java được tạo ra bởi những công cụ tạo tài liệu Java.
  • @Documented: Chú thích chỉ ra rằng loại chú thích có thể được kế thừa từ lớp cha và có giá trị mặc định là false. Lúc khách hàng truy vấn kiểu Annotation của lớp con và lớp con ko có chú thích cho kiểu này thì lớp cha của lớp được truy vấn cho loại chú thích sẽ được gọi. Chú thích này chỉ vận dụng cho những khai báo class.

5. Khởi tạo Annotation (Annotation tự động định nghĩa)

Annotation khá giống 1 interface, để khai báo 1 Annotation chúng ta dùng @interface. Annotation có thể có hoặc ko có những phần tử (factor) trong ấy.

Xem Thêm  &quot Sus Là Gì Trong Tiếng Việt? Nghĩa Của Từ Sus Trong Tiếng Việt – sentayho.com.vn

1 phần tử của Annotation có những đặc điểm như sau:

  1. Ko có thân hàm
  2. Ko có tham số hàm
  3. Khai báo trả về bắt buộc là 1 kiểu dữ liệu cụ thể (Kiểu nguyên thủy, Enum, Annotation hoặc Class).
  4. Có thể có giá trị mặc định.

1 Annotation sẽ đượng định nghĩa bởi những Meta-Annotations. Những Meta-Annotations gồm @Retention, @Goal, @Documented, @Inherited.

Thí dụ:

#Khởi tạo

import sentayho.com.vnentType; import sentayho.com.vnntion; import sentayho.com.vnntionPolicy; import sentayho.com.vnet; @Retention(worth = sentayho.com.vnCE) //Nó tồn tại trên mã nguồi và trình biên dịch ko nhận ra @Goal(worth = {ElementType.METHOD, sentayho.com.vnD}) //Nó sẽ được dùng chú thích tren mot technique public @interface MyCustomAnnotation{ }

#Dùng

public class UsingAnno { @MyCustomAnnotation //Gán trước 1 subject non-public int myAge = 22; @MyCustomAnnotation //Gán trước 1 technique public void aMethod(){ } }

Trên là 1 dí dụ nhằm có chiếc nhìn cơ bản về phương pháp khởi tạo 1 Annotation.

6. Annotation lồng nhau (lặp lại chú thích) và phương pháp dùng

Trong 1 số trường hợp, nhu cầu dùng 1 Annotation nhiều lần. Lúc ấy chúng ta cần tạo 1 Wrapper chứa danh sách những Annotation có thể lặp lại.

Thí dụ:

import sentayho.com.vnentType; import sentayho.com.vnntion; import sentayho.com.vnntionPolicy; import sentayho.com.vnet; public class TestAnnotationMain { // 1. Koi tao mot chu thich can lap lai @Goal(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface ReAnno { String worth(); }; // 2. Khoi tao mot chu thich lengthy nhau @Goal(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface ReAnnos { ReAnno[] worth(); } // 3. Use repeating annotations @ReAnnos({ @ReAnno(“Codelearn”), @ReAnno(“NMD.SE”)}) public interface ReAnnotation { } public static void most important(String[] args) { // 4. Retrieving Annotations by way of the Filters class ReAnnos rep = sentayho.com.vnnnotation(ReAnnos.class); for (ReAnno re : sentayho.com.vne()) { sentayho.com.vntln(re.worth()); } } }

7. Tổng kết

Trên đây là bài viết chia sẽ những tri thức cơ bản về Annotation (chú thích) trong Java. Hello vọng qua bài viết này, bạn đọc có thể nắm được tri thức nền móng về Annotation trong Java và phương pháp dùng nó. Cảm ơn người tiêu dùng đã chú ý tới bài viết và siêu mong nhận được ý kiến đóng góp, bổ sung nhằm giúp bài viết hoàn chỉnh hơn. Giả dụ bạn thấy hay hãy like và chia sẻ để ủng hộ mình nhé!

Nguồn tham khảo: Annotation – Java Oracle