“可比较<T>”应该是“功能接口”吗?
函数接口的定义是“函数接口是只有一个抽象方法(除了Object的方法)的接口,因此表示单个函数合约。
根据这个定义,绝对是一个功能接口。Comparable<T>
lambda表达式的定义是“lambda表达式就像一个方法:它提供了一个形式参数的列表和一个主体 - 一个表达式或块 - 用这些参数表示。
lambda 表达式的计算会生成功能接口的实例。
因此,lambda 表达式的目的是能够通过实现函数接口的单个函数来创建函数接口的实例。即。以允许创建具有单个函数的实例。
让我们看一下,这个界面是设计为作为单个函数使用的吗?即。它是否专为创建仅具有此单个函数的实例而设计?Comparable<T>
的文档以“此接口对实现它的每个类的对象施加总排序。这种排序被称为类的自然排序,类的compareTo方法被称为其自然比较方法。Comparable<T>
上面的句子清楚地表明,不是设计为用作单个函数,而是始终意味着由一个类实现,该类通过添加此单个函数对其实例具有自然排序。Comparable<T>
这意味着它不是设计为使用 lambda 表达式创建的?
关键是我们不会有任何对象只是可比的,它意味着实现,因此用作类的附加函数。
那么,在Java语言中是否有一种方法可以阻止创建lambda表达式?接口的设计人员是否可以确定此接口应由类实现,而不是通过使用 lambda 表达式使用此单个方法创建为实例?Comparable<T>
仅仅因为一个接口碰巧有一个抽象方法,它就不应该被视为一个功能接口。
也许,如果Java提供了像NotFunctional这样的注释,编译器可以检查该接口是否不用于创建lambda表达式,例如。
@NotFunctional
public interface Comparable<T> { public int compareTo(T t); }