gpt4 book ai didi

Java - 默认接口(interface)方法不能充当其他接口(interface)方法的实现

转载 作者:行者123 更新时间:2023-12-02 00:38:42 24 4
gpt4 key购买 nike

有人可以指出为什么默认接口(interface)方法无法为某个类实现的其他接口(interface)方法定义行为/实现吗?

interface Transformable {
int quarter();
BigDecimal value();
}

interface Quarterly {

int getQuarter();

void setQuarter(int quarter);

// Method that I would expect to be used to define Transformable method behavior
default int quarter() {
return getQuarter();
}
}

// expects quarter() implementation
static class SomethingQuarterly implements Quarterly, Transformable {

private int quarter;
private BigDecimal value;

@Override
public int getQuarter() {
return quarter;
}

@Override
public void setQuarter(int quarter) {
this.quarter = quarter;
}

@Override
public BigDecimal value() {
return value;
}
}

最佳答案

问题是,如果 Transformable::quarter 更改为默认方法(从接口(interface)的角度来看这应该是向后兼容的更改),则会导致 the diamond problem 。将选择两个默认值中的哪一个?

编译器当然不知道,因此最安全的做法是让编写实现的人解决问题即使问题还不存在。通过让实现者解决歧义,Transformable::quarter 将来可以更改为默认方法,而不会破坏 SomethingQuarterly

如果这两个方法在概念上相关,并且 Quarterly 应覆盖 Transformable,则应使 Quarterly 扩展该接口(interface)。

interface Quarterly extends Transformable {
//...
}

关于Java - 默认接口(interface)方法不能充当其他接口(interface)方法的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60755995/

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