Hỏi đáp

Hướng Dẫn Sử Dụng Java Annotation Là Gì Và Chức Năng Của Nó? – viettingame

Annotation (chú thích) là một loại siêu dữ liệu (metadata information) trong java mà thậm chí được vận dụng ở những thực thể mã nguồn java để sau đó một số trong những dụng cụ (tool), trình gỡ lỗi (debugger) hoặc chương trình ứng dụng mà thậm chí tận dụng những chú thích này.

Đang xem: Annotation là gì

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

Những Annotation ko trực tiếp tác động tới việc triển khai những mã của người tiêu dùng, tuy vậy một số trong những loại chú thích thực sự mà thậm chí được sử dụng cho mục đích đó.

Annotation là một tính năng rất hay và được sử dụng rất nhiều trong Java. Thậm chí các bạn đã gặp gỡ những Annotation trong số ứng dụng Java như:

Java Core:
ManyToOne, …

Trong bài này, chúng ta sẽ lần lượt tìm hiểu qua những chủ đề sau: mục đích sử dụng annotations, những kiểu annotation được định nghĩa sẵn trong Java và phương pháp để tạo ra những annotation tùy biến.

Những annotation được sử dụng để làm gì?

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

Hướng dẫn cho trình biên dịch (Compiler)Hướng dẫn trong thời điểm biên dịch (Build-time)Hướng 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 hợp sẵn 3 annotation để hỗ trợ những hướng dẫn nhất định cho trình biên là:
SuppressWarnings. Những Annotation này được trình bày cụ thể hơn trong phần dưới của nội dung bài viết này.

Hướng dẫn trong lúc biên dịch (Compile-time)

Những chú thích mà thậm chí hỗ trợ hướng dẫn trong lúc biên dịch cho trình biên dịch mà mà thậm chí kế tiếp được sử dụng bởi những ứng dụng như sinh code, XML file,…

Hướng dẫn trong thời hạn chạy (Runtime)

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

Cơ phiên bản về Annotations

Một chú thích luôn luôn chính thức với ký hiệu
Deprecated
chỉ ra rằng rằng những thực thể bị lưu lại (class, method hoặc field) đã biết thành lỗi thời, tốt nhất ko nên sử dụng nữa. Trình biên dịch sinh ra một chú ý bất kì một khi chương trình sử dụng một phương thức, lớp hoặc trường đã biết thành lưu lại với chú thích
Deprecated. Lúc một thực thể bị lưu lại với chú thích này thì trong Javadoc cũng sẽ bị thêm vào thẻ
deprecated để chú ý cho những người sử dụng.

Cú pháp:

// Javadoc comment follows /** *
deprecated * explanation of why it was deprecated */
Deprecated static void deprecatedMethod() { }Với những IDE lập trình ví dụ như Eclipse nó sẽ thông tin cho mình một cách trực quan.

*
*
*

Trong ví dụ trên:

SuppressWarnings(“deprecation”) để thông tin trình biên dịch ko chú ý việc sử dụng phương thức sở hữu sử dụng 
SuppressWarnings(“unchecked”) để thông tin trình biên dịch ko chú ý việc sử một ép kiểu ko an toàn và tin cậy.
SuppressWarnings(“rawtypes”) để thông tin trình biên dịch ko chú ý việc khai báo kiểu dữ liệu ko tường minh.

Cách tạo Custom Annotations

Sử dụng
interface
là từ khóa khai báo một Annotation, annotation khá giống một interface. Annotation sở hữu hoặc không tồn tại những thực thể (element) trong nó.

Điểm sáng của những thực thể (element) của annotation:

Không tồn tại thân hàmKhông sở hữu tham số hàmKhai báo trả về phải là một kiểu ví dụ:Những kiểu nguyên thủy (boolean, int, float, …)EnumAnnotationClass (Ví dụ String.class)Thậm chí sở hữu giá trị mặc định.


Retention
: Sử dụng để chú thích mức độ tồn tại của một annotation nào khác.

Ví dụ sở hữu 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 java.lang.annotation.RetentionPolicy::

SOURCE: Tồn tại trên code nguồn, và ko được bộ dịch (compiler) nhận ra.

Xem thêm: game mario giai cuu cong chua 1

CLASS: Mức tồn tại được bộ dịch nhận ra, nhưng vẫn không được nhận thấy bởi máy ảo tại thời điểm chạy (Runtime).RUNTIME: Mức tồn tại to nhất, được bộ dịch (compiler) nhận thấy, và máy ảo thời điểm chạy cũng nhận ra sự tồn tại của nó.


Target
: Sử dụng để chú thích cho một annotation khác, và annotation đó sẽ được sử dụng trong phạm vi nào. Những chú thích này đã được định nghĩa trong enum java.lang.annotation.ElementType:

TYPE : Gắn trên khai báo Class, interface, enum, annotation.FIELD : Gắn trên khai báo trường (field), bao hàm cả những hằng số enum.METHOD : Gắn trên khai báo method.PARAMETER : Gắn trên khai báo parameterCONSTRUCTOR : Gắn trên khai báo cấu tửLOCAL_VARIABLE : Gắn trên biến địa phương.ANNOTATION_TYPE : Gắn trên khai báo AnnotationPACKAGE : Gắn trên khai báo package.


Documented
: chú thích này chỉ ra rằng rằng chú thích mới nên được bao hàm trong tài liệu java được tạo ra bởi những dụng cụ tạo tài liệu java.


Inherited
: chú thích chỉ ra rằng rằng loại chú thích mà thậm chí được kế thừa từ super class (mặc định là false). Lúc người sử dụng truy vấn kiểu annotation của lớp con và lớp con không tồn tại chú thích cho 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. Chú thích này chỉ vận dụng cho những khai báo lớp.

Ví dụ tạo một Annotation để lưu lại những cột cần xuất dữ liệu ra file excel. Annotation này còn có 3 thuộc tính: index để xác xác định trí xuất dữ liệu ra file excel, title để xác định tiêu đề cột, description để mô tả cho cột.

package com.viettingame.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 thực thể được gán giá trị mặc định lúc tạo mà thậm chí được bỏ qua lúc sử dụng chú thích. Ví dụ, vận dụng annotation cho một class như sau:

package com.viettingame.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 trường hợp, chúng ta cần sử dụng một Annotation nhiều lần annotation tại cùng 1 vị trí trong một method, constructor. Lúc đó chúng ta cần tạo một Wrapper annotation để chứa danh sách những Annotation mà thậm chí lặp lại.

Ví dụ:

package com.viettingame.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 chương trình trên:

filter1filter2Trên phía trên là những kỹ năng và kiến thức cơ phiên bản về Annotation trong Java. Ở nội dung 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 và Java Reflection ra sao trong số ứng dụng thực tiễn.

Xem thêm: Bác Sĩ Nội Trú : Trang Chủ, Yêu Cầu Cần Mang Để Trở Thành Bác Sĩ Nội Trú

Cám ơn chúng ta đã sử dụng rộng rãi và theo dõi nội dung bài viết, hẹn tái ngộ chúng ta ở nội dung bài viết tiếp theo.

Về Viettingame.com

Viettingame.com - Chuyên trang web tổng hợp những thông tin hữu ích trên internet như thông tin về game, tin tổng hợp
Xem tất cả các bài viết của Viettingame.com →

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *