Почему интерфейсы не допускаются в качестве членов аннотации?

Рассмотрим этот код:

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Bar {
    Foo foo() default FooImpl.FooConstant;
}

Ошибка компилятора:

значение аннотации не допустимого типа

Если я заменю Foo на FooImpl, код будет принят.

В чем причина такого поведения?

10
задан soc 23 August 2011 в 12:43
поделиться