返回类型与<Interface.functionName>不兼容

用户名

我懂了

“返回类型与Bar.doClick()不兼容”

import some.library.Bar

public class Foo implements Bar {

   public enum Outcome {
       ONE, TWO, THREE, NEW;
   }

   public Outcome doClick() {
       return Outcome.NEW;
   }
}

会给我错误,为什么?我正在尝试返回我认为正确的类型。

Bar.class 包含以下几行:

    public enum Outcome {
        ONE, TWO, THREE, NEW;
    }
    Outcome doClick ();

Eclipse告诉我,如果我更改

public Outcome doClick() {
    return Outcome.NEW;
}

进入

public Bar.Outcome doClick() {
    return Outcome.NEW;
}

我可以解决错误,但在返回行上创建一个新错误。我认为我真的对这里的原则问题迷失了,可以使用一些基本的理解。

Sotirios Delimanolis

在您的Bar界面中,Outcome是指enum您在中声明成员Bar因此,doClick()抽象方法的返回类型为Bar.Outcome

在您的Foo课程中,您声明了另一个enum成员,也称为OutcomedoClick您错误地声明的方法Bar的返回类型为Foo.Outcome由于方法签名未考虑返回类型,因此您可以有效地使用此方法

public Outcome doClick() {
    return Outcome.NEW;
}

public Bar.Outcome doClick() {
    return Outcome.NEW;
}

这将导致编译错误,因为您有重复的方法。

您的doClick()方法必须返回一个Bar.Outcome对象以实现(满足)Bar接口。

public Bar.Outcome doClick() {
    return Bar.Outcome.NEW;
}

由于阴影

return Outcome.NEW;

指的是Foo.Outcome.NEW哪种类型不是Bar.Outcome期望的返回类型。

我不知道为什么您用相同的名称声明了两个枚举。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章