Java 8 – Annotation – Phần 1


Được đăng vào ngày 10/07/2017 | 0 bình luận
Java 8 – Annotation – Phần 1
5 (100%) 3 votes

Annotations là một kiểu metadata (hay siêu dữ liệu) cung cấp thông tin thêm cho một chương trình, nhưng lại không đóng một vai trò nào trong quá trình chạy của chương trình cả. Annotation không ảnh hưởng hay điều chỉnh các đoạn code mà chương trình chạy.

Một số mục đích của annotation là:

  • Cung cấp thông tin cho trình biên dịch, trình biên dịch có thể dùng annotation để phát hiện lỗi.
  • Xử lý một số công việc trong quá trình biên dịch và khởi chạy, chẳng hạn như có thể dùng để tạo ra các file code, XML…v.v
  • Xử lý một số công việc trong quá trình chạy.

Cơ bản về annotation trong Java

Annotation có dạng như sau:

@Entity

Kí tự @ cho trình biên dịch biết theo sau là một annotation, ở trên annotation có tên Entity. Annotation mà chúng ta thường dùng nhất là @Override.

@Override
void mySuperMethod() { ... }

Annotation có thể mang theo các thuộc tính và giá trị của riêng nó, chẳng hạn như:

@Blog(
   name = "Pho Code",
   site = "phocode.com"
)
class MyClass() { ... }

Hay một kiểu khai báo khác là:

@Blog(name = "Pho Code")
void myMethod() { ... }

Nếu annotation chỉ có một thuộc tính thì không cần ghi tên thuộc tính ra cũng được, ví dụ:

@Blog("Pho Code")
void myMethod() { ... }

Nếu không có thuộc tính thì không cần đến cặp dấu () như trong @Override.

Có thể khai báo nhiều annotation tại một vị trí:

@Blog
@Site
class MyClass { ... }

Và cũng có thể khai báo nhiều annotation cùng tên tại một vị trí, đây là tính năng chỉ được hỗ trợ trong Java 8, chúng ta sẽ tìm hiểu thêm sau, ví dụ:

@Blog(name = "Pho Code")
@Blog(name = "Java 8")
class MyClass { ... }

Annotation có thể đứng trước khai báo lớp, thuộc tính, phương thức và các thành phần khác của chương trình. Khi khai báo thì annotation được đặt trên dòng riêng của nó.

Đặc biệt trong Java 8 thì annotation có thể dùng giống như một lớp, tức là có thể tạo thành đối tượng, ép kiểu dữ liệu, kế thừa giao diện, giải phóng lỗi ngoại lệ…v.v

//  Tạo đối tượng
new @Blog MyObject();

//  Ép kiểu
str1 = (@Name String) str2;

//  Kế thừa giao diện
class MyClass implements @Blog AnotherClass { ... }

//  Giải phóng lỗi exception
void myMethod() throws @Blog Exception { ... }

Gần như annotation được dùng để thay thế cho tính năng comment trong các đoạn code.

Ví dụ như chúng ta có đoạn code khai báo lớp như sau:

public class Generation3List extends Generation2List {

   // Author: J.K. Rowling
   // Date: 3/17/2002
   // Current revision: 6
   // Last modified: 4/12/2004
   // By: phocode.com
}

Chúng ta có thể thay đoạn code comment ở trên bằng đoạn annotation như sau:

@ClassPreamble (
   author = "J.K. Rowling",
   date = "3/17/2002",
   currentRevision = 6,
   lastModified = "4/12/2004",
   lastModifiedBy = "phocode.com",
)
public class Generation3List extends Generation2List {

}

Định nghĩa annotation

Ví dụ về một đoạn code định nghĩa annotation:

public @interface AnnotationExample {
   String author();
   String date();
   int currentRevision() default 1;
   String lastModified() default "N/A";
   String lastModifiedBy() default "N/A";
}

Chúng ta định nghĩa annotation bằng cách ghi từ khóa @interface, rồi đến tên annotation, sau đó là cặp dấu ngoặc nhọn {}, rồi đến danh sách các thuộc tính.

Ở đây các thuộc tính được khai báo bằng cách khai báo kiểu dữ liệu, rồi đến tên thuộc tính và cặp dấu ngoặc tròn (). Nếu muốn chúng ta có thể đưa giá trị mặc định cho thuộc tính bằng cách ghi từ khóa default, theo sau là giá trị mặc định đó.

Được đăng vào ngày 10/07/2017