返回类型与<interface.functionname> </interface.functionname>不兼容

时间:2014-02-16 06:27:46

标签: java return-type incompatibletypeerror

我得到了

  

“返回类型与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;
}

我可以解决错误但在我的回程线上创建一个新错误。我认为我真的迷失在这里的一个主要问题上,可以使用一些基本的理解。

1 个答案:

答案 0 :(得分:4)

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

Foo课程中,您宣布另一位名为enum的{​​{1}}成员。您在Outcome中错误声明的方法doClick的返回类型为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类型,它是预期的返回类型。

我不知道为什么你声明了两个同名的枚举。