Tùy chỉnh annotation trong java hoặc Java annotation được người dùng định nghĩa rất dễ dàng để tạo và sử dụng. Phần tử @interface được sử dụng để khai báo một annotation. Ví dụ:
1 |
|
Ở đây, chú thích MyAnnotation là tên annotation tùy chỉnh.
Có 3 kiểu của annotation:
Một annotation không có phương thức được gọi là marker annotation. Ví dụ:
1 |
|
@Override và @Deprecated là các maker annotation.
Một annotation mà có một phương thức được gọi là single-value annotation. Ví dụ:
1 2 3 |
|
Bạn cũng có thể cung cấp giá trị mặc định, ví dụ:
1 2 3 |
|
Ví dụ sử dụng Single-Value Annotation:
1 |
|
value có thể là những giá trị khác.
Một annotation mà có nhiều hơn một phương thức được gọi là Multi-Value annotation. Ví dụ:
1 2 3 4 5 6 7 |
|
Bạn cũng có thể cung cấp giá trị mặc định, ví dụ:
1 2 3 4 5 6 7 |
|
Ví dụ sử dụng Multi-Value Annotation:
1 |
|
Thẻ @Target được sử dụng để chỉ định loại nào được sử dụng.
enum java.lang.annotation.ElementType khai báo nhiều hằng số để xác định loại phần tử mà annotation được áp dụng như TYPE, METHOD, FIELD vv. Dưới đây là bảng các hằng số của enum ElementType:
Kiểu phần tử |
Trường hợp có thể áp dụng annotation |
---|---|
TYPE |
class, interface hoặc enumeration |
FIELD |
các trường |
METHOD |
các phương thức |
CONSTRUCTOR |
các constructor |
LOCAL_VARIABLE |
biến local |
ANNOTATION_TYPE |
kiểu annotation |
PARAMETER |
tham số |
Ví dụ chỉ định annoation cho class:
1 2 3 4 5 6 7 8 9 |
|
Ví dụ chỉ định annoation cho các class, phương thức và trường:
1 2 3 4 5 6 7 8 9 |
|
Thẻ @Retention được sử dụng để chỉ định annotation được sử dụng ở mức độ nào.
Hằng số RetentionPolicy |
Khả năng |
---|---|
RetentionPolicy.SOURCE |
tham chiếu đến mã nguồn, bị loại bỏ trong quá trình biên dịch. Nó sẽ không có sẵn trong lớp được biên dịch. |
RetentionPolicy.CLASS |
tham chiếu tới tập tin .class, ó sẵn cho trình biên dịch java nhưng không cho JVM. Nó được bao gồm trong tập tin .class. |
RetentionPolicy.RUNTIME |
tham chiếu tới thời gian chạy, sẵn có cho trình biên dịch java và JVM. |
Ví dụ để chỉ định RetentionPolicy
1 2 3 4 5 6 7 8 9 10 11 12 |
|
Theo mặc định, các annotation không được kế thừa cho các lớp con. Annotation @Inherited được thừa kế đánh dấu annotation này được kế thừa cho các lớp con.
1 2 3 4 5 6 7 8 9 10 11 |
|
Thẻ @Documented đánh dấu chú thích để đưa vào tài liệu.
Ví dụ 1: Dưới đây là ví dụ đơn giản sử dụng reflection trong java để lấy giá trị của annotation.
Bạn phải thêm @Retention(RetentionPolicy.RUNTIME) vào để annotation của bạn sử dụng được lúc runtime.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
|
Kết quả:
value is: 10 classType is: ENTITY
Ví dụ 2: đây là ví dụ về việc sử dụng @Inherited để cho phép lớp con được phép kế thừa các annotation của lớp cha.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
|
Kết quả:
classType is: ENTITY
Nguồn tin: viettuts.vn