Anotasi yang diperluas dapat secara efektif menambah beban menentukan dan memelihara sistem tipe lain. Dan ini akan menjadi sistem tipe yang cukup unik, jadi Anda tidak bisa begitu saja menerapkan paradigma tipe OO.
Pikirkan semua masalah saat Anda memperkenalkan polimorfisme dan pewarisan ke anotasi (mis. Apa yang terjadi ketika sub-anotasi mengubah spesifikasi meta-anotasi seperti retensi?)
Dan semua ini menambah kompleksitas untuk kasus penggunaan apa?
Anda ingin tahu apakah anotasi yang diberikan termasuk dalam kategori?
Coba ini:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Seperti yang Anda lihat, Anda dapat dengan mudah mengelompokkan dan mengelompokkan anotasi tanpa rasa sakit yang tidak perlu menggunakan fasilitas yang disediakan.
Jadi, KISS adalah alasan untuk tidak memperkenalkan sistem tipe meta-type ke bahasa Java.
[ps edit]
Saya menggunakan String hanya untuk demonstrasi dan mengingat penjelasan meta terbuka berakhir. Untuk proyek Anda sendiri, Anda jelas dapat menggunakan enum tipe kategori dan menentukan beberapa kategori ("multiple inheritance") untuk anotasi yang diberikan. Perhatikan bahwa nilainya sepenuhnya palsu dan hanya untuk tujuan demonstrasi:
@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
, yaitu anotasi apa puninstanceof
itu meskipun fakta ini tidak secara eksplisit dinyatakan.