Аннотации @FunctionalInterface
служат для двух целей. Что касается компилятора и ошибки, которую он должен сгенерировать, было бы достаточно, чтобы иметь SOURCE
RetentionPolicy
, поскольку в этом отношении он влияет только на сам класс, аннотированный с помощью @FunctionalInterface
.
Однако это имеет вторую цель, документируя тот факт, что использование этого interface
в качестве функционального интерфейса действительно предназначено и возможность использовать его таким образом, а не просто совпадение, например, с, например, Comparable
, который не предназначен для использования таким образом.
Поэтому он аннотируется с @Documented
и имеет максимальную RetentionPolicy
для выполнения второй цели.