我得到了
“返回类型与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;
}
我可以解决错误但在我的回程线上创建一个新错误。我认为我真的迷失在这里的一个主要问题上,可以使用一些基本的理解。
答案 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
类型,它是预期的返回类型。
我不知道为什么你声明了两个同名的枚举。