คำอธิบายประกอบแบบขยายได้จะเพิ่มภาระในการระบุและบำรุงรักษาระบบประเภทอื่นได้อย่างมีประสิทธิภาพ และนี่จะเป็นระบบพิมพ์ที่มีเอกลักษณ์เฉพาะตัวดังนั้นคุณจึงไม่สามารถใช้กระบวนทัศน์ประเภท OO ได้
คิดถึงปัญหาทั้งหมดเมื่อคุณแนะนำความหลากหลายและการสืบทอดให้กับหมายเหตุประกอบ (เช่นเกิดอะไรขึ้นเมื่อคำอธิบายประกอบย่อยเปลี่ยนข้อมูลกำกับ meta-annotation เช่นการเก็บรักษา)
และทั้งหมดนี้เพิ่มความซับซ้อนให้กับกรณีการใช้งาน?
คุณต้องการที่จะรู้ว่าคำอธิบายประกอบที่กำหนดเป็นของหมวดหมู่หรือไม่?
ลองสิ่งนี้:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
อย่างที่คุณเห็นคุณสามารถจัดกลุ่มและจัดหมวดหมู่คำอธิบายประกอบได้อย่างง่ายดายโดยไม่ต้องเจ็บปวดโดยใช้สิ่งอำนวยความสะดวกที่มีให้
ดังนั้นKISSคือเหตุผลที่ไม่แนะนำระบบประเภทเมตากับภาษาจาวา
[แก้ไข ps]
ฉันใช้สตริงเพียงเพื่อสาธิตและในมุมมองของคำอธิบายประกอบเมตาสิ้นสุดวันที่เปิด สำหรับโครงการของคุณเองคุณสามารถใช้ประเภทประเภท enum และระบุหลายหมวดหมู่ ("การสืบทอดหลายรายการ") ให้กับคำอธิบายประกอบที่กำหนด โปรดทราบว่าค่านั้นเป็นของปลอมทั้งหมดและเพื่อวัตถุประสงค์ในการสาธิตเท่านั้น:
@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
เช่นคำอธิบายประกอบใด ๆinstanceof
ถึงแม้ว่าข้อเท็จจริงนี้จะไม่ได้ประกาศอย่างชัดเจน