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

时间:2017-01-11 19:24:43

标签: java lambda java-8 functional-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);

} 

我也可以将第一个视为功能界面。例如:

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;
    }
}

班长

package tester;

public class runner {

    public static void main(String a[]){

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

代码可以使用或不使用注释,那么为什么注释呢? 为什么不能说任何具有单一方法的接口都可以作为功能接口?

2 个答案:

答案 0 :(得分:7)

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

@FunctionalInterface
public interface ExampleInterface {
}

会导致编译错误。

答案 1 :(得分:4)

是的,任何一个要实现的抽象方法的接口都可以是一个功能接口,注释FunctionalInterface不是必需的,它只是一个信息性注释,如javadoc中所述。

  

信息性注释类型,用于指示接口   类型声明旨在成为定义的功能接口   通过Java语言规范。

     

...

     

但是,编译器会处理符合定义的任何接口   功能接口作为功能接口,无论如何   是否存在FunctionalInterface注释   界面声明。