@FunctionalInterface 只是一个标记接口还是更多?

Is @FunctionalInterface just a marker interface or more than that?

我猜@FunctionalInterface 甚至在 Java 8 之前就存在了(虽然没有直接命名为 @FunctionalInterface 接口,例如 ComparatorComparable 具有单一方法) .它只是一个标记接口还是会触发编译器检查以确保该接口包含一个且仅一个可用于 lambda 表达式的方法?

它甚至不是一个标记。来自 @FunctionalInterface API:

An informative annotation type used to indicate that an interface type declaration is intended to be a functional interface as defined by the Java Language Specification.

(我添加的突出显示)

它被附加注释@Documented,因此该注释的存在将出现在例如javadocs中。

但是,它提供了一些编译时安全性。如果被注解的接口有多个非默认方法,我们会收到一个编译错误。

Ideone demo