功能接口的定义是"功能接口是一个只有一个抽象方法的接口(除了Object的方法),因此代表一个单一的功能契约."
根据这个定义,Comparable<T>它绝对是一个功能界面.
lambda表达式的定义是"lambda表达式就像一个方法:它提供了一个形式参数列表和一个正文 - 一个表达式或块 - 用这些参数表示."
lambda表达式的评估产生功能接口的实例.
因此,lambda表达式的目的是通过实现功能接口的单个功能来创建功能接口的实例.即.允许使用单个函数创建实例.
让我们来看看Comparable<T>,这个界面是否设计用作单一功能?即.它是否仅用于创建具有此单一功能的实例?
Comparable<T>以"This接口开头的文档对每个实现它的类的对象施加了一个总排序.这个排序被称为类的自然排序,类的compareTo方法被称为它的自然比较方法."
上面的句子清楚地表明,Comparable<T>它不是设计用作单个函数,而是总是由一个类实现,它通过添加这个单个函数对其实例具有自然顺序.
这意味着它不是设计为使用lambda表达式创建的?
关键是我们不会有任何仅仅是可比较的对象,它意味着要实现,因此用作类的附加功能.
那么,Java语言中是否有一种方法Comparable<T>可以防止创建lambda表达式?接口的设计者是否可以决定该接口是否由类实现,而不是通过使用lambda表达式使用此单一方法创建为实例?
仅仅因为接口恰好有一个抽象方法,它不应该被视为一个功能接口.
也许,如果Java提供像NotFunctional这样的注释,编译器可以检查该接口是否不用于创建lambda表达式,例如.
@NotFunctional
public interface Comparable<T> { public int compareTo(T t); }
Run Code Online (Sandbox Code Playgroud)