Во время работы с аннотациями я наткнулся на следующий фрагмент кода (это аннотация Hibernate @NotNull):
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
@Constraint(validatedBy = {})
public @interface NotNull {
@Target(value = {ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(value = RetentionPolicy.RUNTIME)
@Documented
public @interface List {
public NotNull[] value();
}
public String message() default "{javax.validation.constraints.NotNull.message}";
public Class<?>[] groups() default {};
public Class<? extends Payload>[] payload() default {};
}
Мне было интересно узнать о default
ключевое слово/конструкцию в определении метода, которое я никогда раньше не видел. Как я понял, он позволяет определить значение по умолчанию для этого метода (или свойство аннотации).
Теперь я пытался применить эту конструкцию к нормальному интерфейсу, но это не удалось. Это не удалось скомпилировать:
public interface DefaultTest {
public String test() default "value";
}
Но это сработало бы:
public @interface DefaultTest {
public String test() default "value";
}
Итак, мой вопрос: Является ли аннотация для ключевого слова default
конкретным? И если да, то что говорит против использования этой конструкции в нормальных определениях интерфейсов?