cod*_*eme 3 java functional-interface
Raoul-Gabriel Urma、Mario Fusco 和 Alan Mycroft 在《Java 8 in Action》一书中指出:
public interface Adder{
int add(int a, int b);
}
public interface SmartAdder extends Adder{
int add(double a, double b);
}
Run Code Online (Sandbox Code Playgroud)
SmartAdder 不是函数式接口,因为它指定了两个称为 add 的抽象方法(一个是从 Adder 继承的)。
在书中的另一个类似示例中,以下接口称为功能接口。
public interface ActionListener extends EventListener {
void actionPerformed(ActionEvent e);
}
Run Code Online (Sandbox Code Playgroud)
与第二个示例相比,是什么让第一个示例不是功能接口?
因为SmartAdder提供了两个方法定义(即被add重载,不被覆盖):
int add(double a, double b);, 和int add(int a, int b); (来自家长)相反,EventListener是一个标记接口,所以ActionListener只提供一个方法定义,它自己的actionPerformed.
EventListener是一个空接口,因此ActionListener扩展它只有一个方法 - public void actionPerformed(ActionEvent e)。因此它是一个功能接口。
另一方面,SmartAdder有两个抽象方法(int add(int a, int b)和int add(double a, double b)),所以它不能是一个函数式接口。
| 归档时间: |
|
| 查看次数: |
2513 次 |
| 最近记录: |