Annotation (chú thích) là một trong những loại siêu tài liệu (metadata information) vào java hoàn toàn có thể được áp dụng ở các thành phần mã mối cung cấp java để tiếp đến một số luật pháp (tool), trình gỡ lỗi (debugger) hoặc công tác ứng dụng có thể tận dụng các chú ưng ý này.

Bạn đang xem: Annotation là gì

Các Annotation được thêm vào Java kể từ JDK 5. Chúng ta có thể chú thích các lớp (class), phương thức (method), những biến (variable), những tham số (parameter) và các gói (package) vào java. Điều quan trọng đặc biệt là phải ghi nhận rằng: các chú say mê được vận dụng trên mã nguồn java được biên dịch thành bytecode và thực hiện kỹ thuật lập trình phản bội chiếu (Reflection) để hoàn toàn có thể truy vấn thông tin siêu tài liệu (metadata information) cùng quyết định hành vi thích hòa hợp để triển khai trong ngữ cảnh nuốm thể.

Các Annotation không trực tiếp tác động đến việc thực hiện các mã của bạn, tuy nhiên một số nhiều loại chú thích thực sự rất có thể được sử dụng cho mục đích đó.

Annotation là một trong những tính năng rất hấp dẫn và được sử dụng tương đối nhiều trong Java. Rất có thể bạn đã gặp các Annotation trong các ứng dụng Java như:

Java Core:
ManyToOne, …

Trong bài bác này, họ sẽ lần lượt tìm hiểu qua các chủ đề sau: mục đích sử dụng annotations, rất nhiều kiểu annotation được có mang sẵn trong Java và cách để tạo ra những annotation tùy biến.


Các annotation được sử dụng để gia công gì?

Annotation được sử dụng cho các mục đích:

Chỉ dẫn mang lại trình biên dịch (Compiler)Chỉ dẫn trong thời điểm biên dịch (Build-time)Chỉ dẫn trong thời hạn chạy (Runtime)

Hướng dẫn cho trình biên dịch (Compiler)

Java được tích đúng theo sẵn 3 annotation để cung ứng những chỉ dẫn nhất định đến trình biên là:
SuppressWarnings. Các Annotation này được giải thích chi tiết hơn trong phần bên dưới của nội dung bài viết này.

Chỉ dẫn trong lúc biên dịch (Compile-time)

Các chú thích rất có thể cung cung cấp hướng dẫn trong những lúc biên dịch đến trình biên dịch mà hoàn toàn có thể tiếp tục được thực hiện bởi các ứng dụng như sinh code, XML file,…

Chỉ dẫn trong thời gian chạy (Runtime)

Thông thường, những Annotation không xuất hiện trong mã Java csau lúc biên dịch. Tuy nhiên, hoàn toàn có thể xác định trong thời gian chạy bằng phương pháp sử dụng kỹ thuật Java Reflection và có thể sử dụng để mang ra đầy đủ hướng dẫn mang đến chương trình tại Runtime.

Cơ bản về Annotations

Một ghi chú luôn bắt đầu với ký kết hiệu
Deprecated
chỉ ra rằng những bộ phận bị khắc ghi (class, method hoặc field) đã trở nên lỗi thời, cực tốt không nên sử dụng nữa. Trình biên dịch hình thành một lưu ý bất cứ bao giờ chương trình sử dụng một phương thức, lớp hoặc trường đã biết thành đánh vết với chú giải
Deprecated. Khi một trong những phần tử bị lưu lại với ghi chú này thì vào Javadoc cũng sẽ bị tiếp tế thẻ
deprecated nhằm cảnh báo cho tất cả những người dùng.

Cú pháp:

// Javadoc bình luận follows /** *
deprecated * explanation of why it was deprecated */
Deprecated static void deprecatedMethod() Với các IDE lập trình ví dụ điển hình như Eclipse nó sẽ thông báo cho chính mình một giải pháp trực quan.

*
*
*

Trong lấy một ví dụ trên:


SuppressWarnings(“deprecation”) để thông báo trình biên dịch không lưu ý việc thực hiện phương thức bao gồm sử dụng 
SuppressWarnings(“unchecked”) để thông báo trình biên dịch không lưu ý việc sử một ép đẳng cấp không an toàn.
SuppressWarnings(“rawtypes”) để thông báo trình biên dịch không cảnh báo việc khai báo kiểu dữ liệu không tường minh.

Cách tạo nên Custom Annotations

Sử dụng
interface
là tự khóa khai báo một Annotation, annotation khá như là một interface. Annotation bao gồm hoặc không có các phần tử (element) vào nó.

Đặc điểm của các thành phần (element) của annotation:

Không có thân hàmKhông gồm tham số hàmKhai báo trả về phải là 1 trong kiểu nắm thể:Các mẫu mã nguyên thủy (boolean, int, float, …)EnumAnnotationClass (Ví dụ String.class)Có thể có giá trị mang định.


Retention
: dùng để làm chú thích mức độ lâu dài của một annotation như thế nào đó.

Cụ thể tất cả 3 mức dìm thức lâu dài của thiết bị được chú thích, với được tư tưởng trong enum java.lang.annotation.RetentionPolicy::

SOURCE: trường thọ trên code nguồn, với không được cỗ dịch (compiler) dấn ra.CLASS: Mức trường tồn được bộ dịch thừa nhận ra, mà lại không được nhận thấy bởi trang bị ảo tại thời khắc chạy (Runtime).RUNTIME: mức tồn tại khủng nhất, được bộ dịch (compiler) thừa nhận biết, cùng máy ảo thời khắc chạy cũng phân biệt sự lâu dài của nó.


Target
: dùng để làm chú thích cho 1 annotation khác, cùng annotation đó sẽ được sử dụng trong phạm vi nào. Các chú phù hợp này đã được có mang trong enum java.lang.annotation.ElementType:

TYPE : đính trên khai báo Class, interface, enum, annotation.FIELD : thêm trên khai báo trường (field), bao gồm cả những hằng số enum.METHOD : lắp trên khai báo method.PARAMETER : đính trên khai báo parameterCONSTRUCTOR : gắn thêm trên khai báo cấu tửLOCAL_VARIABLE : lắp trên đổi thay địa phương.ANNOTATION_TYPE : đính trên khai báo AnnotationPACKAGE : đính thêm trên khai báo package.


Documented
: chú say đắm này chỉ ra rằng chú mê say mới đề xuất được bao hàm trong tài liệu java được tạo thành bởi những công nỗ lực tạo tư liệu java.


Inherited
: chú thích chỉ ra rằng rằng loại chú thích hoàn toàn có thể được thừa kế từ super class (mặc định là false). Khi người dùng truy vấn hình dạng annotation của lớp nhỏ và lớp con không tồn tại chú thích đến kiểu này thì lớp superclass của lớp được truy vấn cho loại chú thích sẽ được gọi. Ghi chú này chỉ áp dụng cho những khai báo lớp.

Ví dụ chế tác một Annotation để đánh dấu các cột bắt buộc xuất dữ liệu ra file excel. Annotation này có 3 ở trong tính: index nhằm xác định vị trí xuất tài liệu ra file excel, title để khẳng định tiêu đề cột, description để biểu lộ cho cột.

package com.herphangout.com.annotation;import java.lang.annotation.Documented;import java.lang.annotation.ElementType;import java.lang.annotation.Inherited;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;
interface ExcelColumn int index();String title();String description() default "Default value";Lưu ý: Những phần tử được gán quý giá mặc định khi tạo có thể được bỏ qua khi thực hiện chú thích. Ví dụ, áp dụng annotation cho một class như sau:

package com.herphangout.com.annotation;import java.util.Date;public class Student
ExcelColumn(index = 1, title = "#", description = "Student"s id")private long id;
ExcelColumn(index = 2, title = "Tên")private String name;
ExcelColumn(index = 3, title = "Tuổi ")private int age;
ExcelColumn(index = 4, title = "Ngày sinh")private Date birthday;

Sử dụng Annotation lồng nhau

Trong một vài ngôi trường hợp, chúng ta cần sử dụng một Annotation nhiều lần annotation tại thuộc 1 địa chỉ trong một method, constructor. Lúc đó chúng ta cần chế tạo một Wrapper annotation để chứa danh sách các Annotation có thể lặp lại.

Ví dụ:

package com.herphangout.com.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;public class RepeatingAnnotations // 1. Declare a Repeatable Annotation Type
Filter("filter2") )public interface Filterable public static void main(String<> args) // 4. Retrieving Annotations via the Filters classFilters filters = Filterable.class.getAnnotation(Filters.class);for (Filter filter : filters.value()) System.out.println(filter.value());}Output của công tác trên:

filter1filter2Trên đó là những kỹ năng và kiến thức cơ bản về Annotation vào Java. Ở bài viết tiếp theo, tôi sẽ reviews với chúng ta cách phối kết hợp Java Annotation cùng Java Reflection ra làm sao trong những ứng dụng thực tế.

Xem thêm: Từ Điển Anh Việt " Vested Interest Là Gì ? Định Nghĩa, Ví Dụ, Giải Thích

Cám ơn chúng ta đã niềm nở và theo dõi bài xích viết, hẹn chạm mặt lại chúng ta ở nội dung bài viết tiếp theo.