Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 8默认方法覆盖(和eclipse)_Java_Eclipse_Java 8 - Fatal编程技术网

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

Java 8默认方法覆盖(和eclipse),java,eclipse,java-8,Java,Eclipse,Java 8,我正在使用Java8 我有以下接口声明: public interface IRequestBuilder { public String processParameters(); } 从这个接口,我派生了另一个接口: public interface IMyRequestBuilder extends IRequestBuilder { @Override default String processParameters(){ return crea

我正在使用Java8

我有以下接口声明:

public interface IRequestBuilder {
    public String processParameters();
}
从这个接口,我派生了另一个接口:

public interface IMyRequestBuilder extends IRequestBuilder {

    @Override
    default String processParameters(){
        return createBody();
    }

    String createBody();

}
(我从IRequestBuilder派生了另一个接口,其中processParameters()未设置为默认值以用于其他目的)

除了从
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
方法是默认方法),那么代码将编译得很好


我在EclipseBugTracker(和)中发现了这方面的两个bug报告。最新的(bug 476517)是下一版本Eclipse(霓虹灯)的“已解决修复”。

类不需要任何东西。您在做什么,具体发生了什么?可能只是eclipse生成的类如果使用类创建向导包含默认方法的空主体,只需删除它,它就可以正常编译。这可能是一个功能,而不是一个问题。最近刚刚修复,该修复仅在Eclipse4.6m2以后(朝向Neon的里程碑2)中可用。在最近的开发版本中,快速修复不再创建不必要的覆盖。@StephanHerrmann你说得对,我没有注意到,我会更新我的答案。