功能界面的概念

当我看一看lambda表达式时,这本书涉及一个只有一种抽象方法的 功能接口 。我的问题针对该测验问题

/* Which of these interfaces are functional interfaces? */

public interface Adder{

int add(int a, int b);

}

public interface SmartAdder extends Adder{

int add(double a, double b);

}

public interface Nothing{

}

我知道最后一个不是,但是我认为第一个和第二个应该是功能接口。但是书上说第二个不是。为什么?它不重写add方法吗?因此,即使在第二秒,也不是只有一种抽象方法吗?

回答:

一种简单的查找方法是尝试定义一个实现的类SmartAdder。编译器会告诉您需要同时实现add(int, int)add(double,

double)

您以为add(double, double)可以覆盖add(int,

int),这是可以理解的,但是它们实际上是单独的方法,并且可能具有完全不相关的实现。

如果SmartAdder已经定义了它的default实现,add(int, int)它将 仍然是 一个功能接口:

public interface SmartAdder extends Adder {

int add(double a, double b);

default int add(int a, int b) {

return add((double)a, (double)b); // this calls the double method instead

}

}

您可能还遇到过@FunctionalInterface注释-

可以将其放置在接口上以在编译时强制该接口仅具有一个抽象方法。如果SmartAdder使用@FunctionalInterface接口本身进行了注释,则无法编译。

以上是 功能界面的概念 的全部内容, 来源链接: utcz.com/qa/401389.html

回到顶部