Các chú thích mở rộng sẽ có hiệu quả thêm gánh nặng của việc chỉ định và duy trì một hệ thống loại khác. Và đây sẽ là một hệ thống loại khá độc đáo, vì vậy bạn không thể đơn giản áp dụng mô hình loại OO.
Hãy suy nghĩ về tất cả các vấn đề khi bạn giới thiệu tính đa hình và kế thừa cho một chú thích (ví dụ: điều gì xảy ra khi chú thích phụ thay đổi các thông số chú thích meta như lưu giữ?)
Và tất cả điều này thêm phức tạp cho trường hợp sử dụng?
Bạn muốn biết nếu một chú thích nhất định thuộc về một thể loại?
Thử cái này:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Như bạn có thể thấy, bạn có thể dễ dàng nhóm và phân loại các chú thích mà không bị đau quá mức khi sử dụng các phương tiện được cung cấp.
Vì vậy, hôn là lý do không giới thiệu một hệ thống loại meta cho ngôn ngữ Java.
[chỉnh sửa]
Tôi đã sử dụng Chuỗi đơn giản để trình diễn và theo quan điểm của một chú thích meta kết thúc mở. Đối với dự án cụ thể của riêng bạn, rõ ràng bạn có thể sử dụng một danh mục các loại danh mục và chỉ định nhiều danh mục ("nhiều kế thừa") cho một chú thích nhất định. Xin lưu ý rằng các giá trị hoàn toàn không có thật và chỉ nhằm mục đích trình diễn:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
AnnotationCategory[] category();
}
public enum AnnotationCategory {
GENERAL,
SEMANTICS,
VALIDATION,
ETC
}
@Category(category={AnnotationCategory.GENERAL, AnnotationCategory.SEMANTICS})
public @interface FooBarAnnotation {
}
java.lang.annotation.Annotation
, tức là bất kỳ chú thích nào cũnginstanceof
vậy mặc dù thực tế này không được tuyên bố rõ ràng.