[英]Java 8 default method override (and eclipse)
我正在使用Java 8。
我有以下接口声明:
public interface IRequestBuilder {
public String processParameters();
}
从这个界面,我派生了另一个界面:
public interface IMyRequestBuilder extends IRequestBuilder {
@Override
default String processParameters(){
return createBody();
}
String createBody();
}
(我从IRequestBuilder派生了另一个接口,其中processParameters()未设置为其他用途的默认值)。
一切正常,除了我从IMyRequestBuilder
派生的每个类IMyRequestBuilder
要求我实现我不想做的processParameters()
,因为它是一个默认方法。
我在Eclipse上工作 - 它只是一个Eclipse问题吗? 我怎么能避免呢?
你在这里看到的只是一个Eclipse bug。
我们考虑以下代码:
interface IRequestBuilder {
public String processParameters();
}
interface IMyRequestBuilder extends IRequestBuilder {
@Override
default String processParameters() {
return createBody();
}
String createBody();
}
class A implements IMyRequestBuilder {
}
Eclipse正确地给出了编译错误:
类型A必须实现继承的抽象方法IMyRequestBuilder.createBody()
它建议快速修复,包括“添加未实现的方法”快速修复。 如果使用此快速修复,您会发现Eclipse(Mars)为createBody
和processParameters
生成存根。
但是,如果删除processParameters
存根(由于processParameters
方法是默认方法,这是预期的),代码将编译得很好。
我在Eclipse bug跟踪器中找到了两个关于此的bug报告( bug 409520和bug 476517 )。 对于下一版本的Eclipse(Neon),最新的(bug 476517)已经“解决了固定”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.