#java
#java
Вопрос:
как я могу написать пользовательскую аннотацию, которая принимает другую аннотацию и значения?
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation{
Class<? extends TestAnnotationChild> annotation();
}
Вторая аннотация
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotationChild{
}
И я хотел бы сделать что-то вроде
@TestAnnotation(@TestAnnotationChild={values})
Как я могу сделать что-то подобное?
Ответ №1:
Вот как это делается.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation {
TestAnnotationChild child();
// Or for an array
TestAnnotationChild[] children();
}
Использование
@TestAnnotation(
@TestAnnotationChild(
value = "42",
anotherValue = 42
)
)
Однако эта часть вашего заявления
и значения
это заставляет меня думать, что вы хотите сделать что-то необычное.
Не могли бы вы уточнить?
Ответ №2:
Вы должны просто использовать TestAnnotationChild value();
вместо Class<? extends TestAnnotationChild> annotation();
.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotation{
TestAnnotationChild value();
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface TestAnnotationChild {
// String or whatever Object you want
String[] value();
}
Теперь вы можете использовать аннотации по своему усмотрению:
@TestAnnotation(@TestAnnotationChild({"TEST"}))
Ответ №3:
у вас может просто быть свойство типа TestAnnotationChild
в вашем TestAnnotation
, точно так же, как это была строка, или что-то еще