相关疑难解决方法(0)

为什么比较器声明等于?

Comparator接口有自己的equals()方法.equals()默认情况下,任何类都将通过Object类获取.equals()在接口中有什么方法需要?

java lambda comparator java-8 functional-interface

26
推荐指数
2
解决办法
4080
查看次数

'Comparable <T>应该是'功能界面'吗?

功能接口的定义是"功能接口是一个只有一个抽象方法的接口(除了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)

java lambda interface java-8 functional-interface

22
推荐指数
2
解决办法
4910
查看次数

当Comparator有两个抽象方法时,它如何成为一个功能接口?

在Java 8中,@FunctionalInterface引入了注释以表示任何具有一个抽象方法作为功能接口的接口.引入它的原因之一是指示用户(程序员),lambda表达式可以在功能接口的上下文中使用.

Comparator接口都被注解@FunctionalInterface.但是,两种方法都是抽象的.

int compare(T o1, T o2);
Run Code Online (Sandbox Code Playgroud)

boolean equals(Object obj);
Run Code Online (Sandbox Code Playgroud)

在文档中FunctionalInterface,它被明确提及为

从概念上讲,功能界面只有一种抽象方法.

这个equals方法不是被认为是抽象的吗?

java comparator java-8 functional-interface

22
推荐指数
2
解决办法
3650
查看次数

为什么@FunctionalInterface不能在JDK中符合条件的所有接口上使用?

Java 8为我们提供了许多有趣的方法来使用功能接口,并为它们添加了一个新的注释:@FunctionalInterface.如果我们不遵守功能接口的规则(只需要一个需要覆盖的抽象方法),它的工作就是告诉编译器对我们大喊大叫.

java.util.function包中43个接口,带有此批注.搜索jdk.1.8.0/src @FunctionalInterface只能获得57次点击.为什么其他可能添加的接口(如AutoCloseable)@FunctionalInterface仍然缺少它?

注释文档中有一些模糊的提示:

"用于指示接口类型声明旨在成为功能接口的信息性注释类型"

有没有什么好的理由不打算我设计的接口(可能只是一个功能接口)不能用作一个接口?除了没有意识到它可能被添加之外,是否有任何迹象?

是不是将抽象方法添加到任何已发布的接口来阻止实现它的任何人,功能与否?我觉得玩世不恭,假设他们只是懒得去追捕他们,但其他解释是什么?

更新:看过"应该'可比'是一个'功能界面'?" 我发现我仍然有唠叨的问题.当单一方法接口和功能接口在结构上相同时,它们会有什么不同?简单的名称是不同的?Comparable和Comparator在语义上足够接近.事实证明它们在结构上是不同的,但仍然不是最好的例子......

是否有一种情况,SMI在结构上很好用作功能接口,但仍然不鼓励接口名称和方法的语义含义?或者也许是Javadocs隐含的合同?

java functional-programming java-8 functional-interface

16
推荐指数
1
解决办法
2574
查看次数