功能界面的概念
当我看一看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