繁体   English   中英

Java 8默认方法覆盖(和eclipse)

[英]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)为createBodyprocessParameters生成存根。

但是,如果删除processParameters存根(由于processParameters方法是默认方法,这是预期的),代码将编译得很好。

我在Eclipse bug跟踪器中找到了两个关于此的bug报告( bug 409520bug 476517 )。 对于下一版本的Eclipse(Neon),最新的(bug 476517)已经“解决了固定”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM