gpt4 book ai didi

java - 功能接口(interface)的概念

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:21:42 26 4
gpt4 key购买 nike

当我瞥一眼 lambda 表达式时,这本书谈到了只有一个抽象方法的函数式接口(interface)。我的问题解决了那个测验问题

/* 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{
}

我知道最后一个不是,但我认为第一个和第二个应该是函数式接口(interface)。但是书上说第二个不是。为什么?它不会覆盖 add 方法吗?那么即使是第二个,抽象方法不也只有一个吗?

最佳答案

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

您认为 add(double, double) 会覆盖 add(int, int) 是可以理解的,但实际上它们是不同的方法,并且可能完全不相关的实现。

如果 SmartAdder 定义了 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 annotation - 这可以放在一个接口(interface)上,以在编译时强制该接口(interface)只有一个抽象方法。如果 SmartAdder@FunctionalInterface 注释,接口(interface)本身将不会编译。

关于java - 功能接口(interface)的概念,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44424491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com