相关疑难解决方法(0)

Java 8中的Functional Interface有什么用?

我在Java 8中遇到了一个名为Functional Interface的新术语.

在使用lambda表达式时,我只能找到一个使用此接口的方法.

Java 8提供了一些内置的功能接口,如果我们想要定义任何功能接口,那么我们就可以使用@FunctionalInterface注释.它允许我们在接口中只声明一个方法.

例如:

@FunctionalInterface
interface MathOperation {
    int operation(int a, int b);
}
Run Code Online (Sandbox Code Playgroud)

除了使用lambda表达式之外,它在Java 8中有多大用处?

这里的问题与我提出的问题不同.在使用Lambda表达式时,它询问为什么我们需要功能接口.我的问题是:为什么使用功能接口而不是直接使用lambda表达式

java lambda interface java-8

144
推荐指数
7
解决办法
9万
查看次数

Java 8供应商和消费者对外行的解释

作为一名学习Java的非Java程序员,我正在阅读SupplierConsumer接口.我无法围绕他们的用法和意义.您何时以及为何使用这些界面?有人可以给我一个简单的非专业人士的例子......我发现Doc的例子不够简洁,我的理解.

java java-8

75
推荐指数
5
解决办法
5万
查看次数

Java 8中"功能接口"的精确定义

最近我开始探索Java 8,我无法理解Java功能实现lambda表达式所必需的"功能接口"的概念.有一个非常全面的 Java函数中的lambda函数指南,但我仍然坚持用于定义函数接口概念的章节.定义如下:

更确切地说,功能接口被定义为具有恰好一个抽象方法的任何接口.

然后他进入示例,其中一个是Comparator界面:

public interface Comparator<T> {
    int compare(T o1, T o2);
    boolean equals(Object obj);
} 
Run Code Online (Sandbox Code Playgroud)

我能够测试我可以使用lambda函数代替Comparator参数,它可以工作(即Collections.sort(list, (a, b) -> a-b)).

但是在Comparator接口中,两者compareequals方法都是抽象的,这意味着它有两个抽象方法.那么如果定义要求接口只有一个抽象方法,那么它如何工作呢?我在这里错过了什么?

lambda abstract java-8 functional-interface

66
推荐指数
2
解决办法
7707
查看次数

为什么我需要一个功能界面来处理lambdas?

我认为这个问题已经存在,但我无法找到它.

我不明白,为什么有必要使用功能界面来处理lambdas.请考虑以下示例:

public class Test {

    public static void main(String...args) {
        TestInterface i = () -> System.out.println("Hans");
//      i = (String a) -> System.out.println(a);

        i.hans();
//      i.hans("Hello");
    }
}

public interface TestInterface {
    public void hans();
//  public void hans(String a);
}
Run Code Online (Sandbox Code Playgroud)

这没有问题,但如果您取消注释注释行,它不会.为什么?在我的理解中,编译器应该能够区分这两种方法,因为它们具有不同的输入参数.为什么我需要一个功能界面并炸毁我的代码?

编辑:链接重复项没有回答我的问题,因为我问的是不同的方法参数.但是我在这里得到了一些非常有用的答案,感谢所有帮助过的人!:)

编辑2:对不起,我显然不是母语人士,但为了准确自己:

public interface TestInterface {
    public void hans();                 //has no input parameters</br>
    public void hans(String a);         //has 1 input parameter, type String</br>
    public void hans(String a, int b);  //has 2 input parameters, 1. type = String, …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 functional-interface

33
推荐指数
4
解决办法
2万
查看次数

Java 8中功能接口的定义

Java 8中功能接口的定义说:

功能性接口被定义为具有任何接口恰好 一个明确声明的抽象方法.(鉴定是必要的,因为接口可能具有非抽象的默认方法.)这就是为什么功能接口曾经被称为单抽象 方法(SAM)接口,这个术语有时仍然可见.

那么我们怎么会这样:

List<Double> temperature = 
   new ArrayList<Double>(Arrays.asList(new Double[] { 20.0, 22.0, 22.5 }));
temperature.sort((a, b) -> a > b ? -1 : 1);
Run Code Online (Sandbox Code Playgroud)

由于sort方法List是:

default void sort(Comparator<? super E> c) {
        Object[] a = this.toArray();
        Arrays.sort(a, (Comparator) c);
        ListIterator<E> i = this.listIterator();
        for (Object e : a) {
            i.next();
            i.set((E) e);
        }
    }
Run Code Online (Sandbox Code Playgroud)

lambda表达式说:

Lambda表达式应该可以分配给功能接口

Comparator接口有两个抽象方法,它们是compareequals用它们注释的@FunctionalInterface.这是否违反了只有一个抽象方法的功能接口的定义?

java java-8 functional-interface

7
推荐指数
1
解决办法
556
查看次数