Java 8 为我们提供了许多有趣的方式来使用函数式接口,并为它们提供了一个新的注解:@FunctionalInterface。它的工作是告诉编译器如果我们未能遵守函数式接口的规则(请只需要一个需要覆盖的抽象方法)就对我们大喊大叫。
java.util.function 包中有43个带有这个注解的接口。搜索 jdk.1.8.0/src@FunctionalInterface
只找到 57 个命中。为什么其他可以添加的接口(如 AutoCloseable)@FunctionalInterface
仍然缺少它?
注释文档中有一些模糊的提示:
“用于指示接口类型声明旨在成为功能接口的信息注释类型”
有什么好的理由不打算不将我设计的接口(可能只是一个功能接口)用作一个接口吗?除了没有意识到它可以被添加之外,它是否意味着任何东西?
向任何已发布的接口添加抽象方法不会让任何人实现它,功能与否?假设他们只是不费心去追捕他们,我感到愤世嫉俗,但还有什么其他解释呢?
更新:查看“‘可比’应该是‘功能界面’吗?” 我发现我仍然有一些唠叨的问题。当单一方法接口和功能接口在结构上相同时,还有什么不同之处?仅仅是名字的区别吗?Comparable 和 Comparator 在语义上足够接近。事实证明它们在结构上是不同的,但仍然不是最好的例子......
是否存在这样的情况,即 SMI 在结构上可以用作功能接口,但仍然不鼓励接口名称和方法的语义含义?或者可能是 Javadocs 所暗示的合同?