java - 任何具有单一方法的接口(interface)都可以被视为功能接口(interface)吗?

标签 java lambda java-8 functional-interface

例如我有这个接口(interface):

package tester;

public interface Calculator{

     public int calculate(int a,int b);

}

package tester;

@FunctionalInterface
public interface Calculator{

    public int calculate(int a,int b);

} 

我也可以将第一个视为功能接口(interface)。例如:

package tester;
public class A {

    int a;
    int b;
    int sum;
    A(Calculator c,int e, int d){
        a=e;
        b=d;
        sum =c.calculate(a, b);

    }
    int get(){
        return sum;
    }
}

类(class)赛跑者

package tester;

public class runner {

    public static void main(String a[]){

        System.out.println(new A((x,b)-> (x+b),1,2).get());
    }
}

无论有没有注解,代码都可以工作,那为什么要有注解呢? 为什么不能说任何只有一个方法的接口(interface)都可以是函数式接口(interface)呢?

最佳答案

FunctionalInterface 注释只是对编译器的提示,是的,任何具有一个抽象方法的接口(interface)都可以是功能接口(interface)。注释可能有助于检测功能界面中的错误。例如:

@FunctionalInterface
public interface ExampleInterface {
}

会导致编译错误。

关于java - 任何具有单一方法的接口(interface)都可以被视为功能接口(interface)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41599115/

相关文章:

java - 单击 JLabel 运行方法

java - boolean 值总是返回 false

java - 如何在Java 8中同时按desc中的值和键按自然顺序对Map进行排序

java - 从 yaml 文件中过滤属性

Java项目在Eclipse中变成可运行的jar ---文件太大

java - 是否有可以可靠地生成 XHTML 1.0 Strict 的 Java Web 框架?

c# 表达式 lambda 到 vb.net

c++ - 通过 copy 和 decltype 捕获 Lambda 引用

java - 创建 Stream 后更改 Stream 源时 Stream 的行为

Java8 Lambda 与匿名类