Genişletilebilir ek açıklamalar, başka bir tür sistemi belirtme ve bakımını yapma yükünü etkili bir şekilde artıracaktır. Ve bu oldukça benzersiz bir tip sistemi olurdu, bu yüzden sadece OO tipi bir paradigma uygulayamazsınız.
Bir ek açıklamaya polimorfizm ve kalıtım eklediğinizde tüm sorunları düşünün (örn. Alt ek açıklama tutma gibi meta ek açıklama özelliklerini değiştirdiğinde ne olur?)
Ve tüm bunlar hangi kullanım durumu için karmaşıklık ekledi?
Belirli bir ek açıklamanın bir kategoriye ait olup olmadığını bilmek ister misiniz?
Bunu dene:
@Target(ElementType.ANNOTATION_TYPE)
public @interface Category {
String category();
}
@Category(category="validator")
public @interface MyFooBarValidator {
}
Gördüğünüz gibi, sağlanan olanakları kullanarak ek açıklamaları gereksiz acı olmadan kolayca gruplayabilir ve kategorilere ayırabilirsiniz.
Bu nedenle, KISS , Java diline bir meta-tip yazı sistemi getirmemenin nedenidir.
[ps değiştir]
String'i sadece gösteri için ve açık uçlu bir meta ek açıklama için kullandım. Kendi verilen projeniz için açık bir şekilde kategori türlerini sıralayabilir ve belirli bir ek açıklamaya birden çok kategori ("çoklu kalıtım") belirtebilirsiniz. Değerlerin tamamen sahte olduğunu ve yalnızca tanıtım amaçlı olduğunu unutmayı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
, yani bu açıklamainstanceof
açıkça bildirilmemesine rağmen herhangi bir açıklamadır .