46得票7回答
为什么我需要一个函数式接口来使用lambda表达式?

我认为这个问题已经存在于某个地方,但我找不到它。我不明白为什么需要有一个函数式接口来使用Lambda表达式。考虑下面的例子:public class Test { public static void main(String...args) { TestInterfa...

42得票2回答
当Comparator有两个抽象方法时,它如何成为一个函数式接口?

在Java 8中,引入了@FunctionalInterface注解,用于表示只有一个抽象方法的任何接口均为函数式接口。引入该注解的原因之一是向用户(程序员)指示,可以在函数式接口上下文中使用Lambda表达式。 Comparator 接口被注解为@FunctionalInterface,但...

41得票4回答
为什么Java 8中的函数式接口只有一个抽象方法?

正如我们所了解的,在Java 8中,引入了函数式接口的概念。函数式接口有一个abstract方法,同时也可以拥有多个默认方法或静态方法。 但是为什么函数式接口只能有一个抽象方法呢?如果接口有多个抽象方法,为什么它就不能成为函数式接口呢?

36得票3回答
函数式接口Comparator有2个抽象方法。

学习Java 8 Lambdas,想知道编译器如何知道在比较器中使用哪个方法来进行lambda表达式?它似乎不是SAM接口?它有两个抽象方法: @FunctionalInterface public interface Comparator<T> { int compar...

34得票4回答
Java中的Callable和Supplier接口有何区别?

Callable和Supplier是Java的两个函数式接口,分别位于java.util.concurrent和java.util.function包中,具有以下签名- public interface Callable<V> { V call() throws Exce...

32得票6回答
在Android API 24以下的版本中,是否有一种使用Java 8函数式接口的方法?

我可以使用retrolambda来启用在Android API level <24下使用Lambda表达式。所以这是可行的。myButton.setOnClickListener(view -> Timber.d("Lambdas work!")); 这也可以工作Runnable ...

32得票4回答
使用Lambda表达式实现具有两个抽象方法的接口

Java 8引入了lambda表达式以帮助减少样板代码。如果接口只有一个方法,则可以正常工作。如果它包含多个方法,则没有任何方法可用。如何处理多个方法? 我们可以看以下示例public interface I1() { void show1(); void show2(); ...

28得票3回答
将Java函数式接口转换

一如既往地,我正在查看 JDK 8 源代码,并发现了非常有趣的代码:@Override default void forEachRemaining(Consumer<? super Integer> action) { if (action instanceof IntCo...

27得票4回答
“Comparable<T>”应该成为一个“函数式接口”吗?

一个函数式接口的定义是:“一个函数式接口只有一个抽象方法(除了 Object 类的方法),因此代表一个单一的函数契约。” 根据这个定义,Comparable&lt;T&gt; 明显是一个函数式接口。 Lambda 表达式的定义是:“Lambda 表达式类似于方法:它提供了一组形式参数和一个...

27得票8回答
为什么Comparator声明equals方法?

Comparator接口有自己的equals()方法。任何类都会默认通过Object类获得equals()方法。那么在接口中拥有equals()方法的必要性是什么?