Возвращаемое значение метода по умолчанию в интерфейсах Java

Во время работы с аннотациями я наткнулся на следующий фрагмент кода (это аннотация 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 {};
}

Мне было интересно узнать о ключевом слове / конструкции по умолчанию в определении метода, который я ' я никогда раньше не видел. Как я понял, он позволяет вам определить значение по умолчанию для этого метода (или свойства аннотации).

Я пытался применить эту конструкцию к обычному интерфейсу, но это не удалось. Это не может быть скомпилировано:

public interface DefaultTest {
    public String test() default "value";
}

Но это сработает:

public @interface DefaultTest {
    public String test() default "value";
}

Итак, мой вопрос: Является ли по умолчанию аннотацией ключевого слова? И если да, то что говорит против использования этой конструкции в определениях обычных интерфейсов?

16
задан MicSim 9 September 2013 в 09:41
поделиться