返回类型是不符合
我得到返回类型是不符合<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;
}
我能解决的错误,但创建我的回报线上有一个新的。我认为我在这里的一个原则问题上真的迷失了,并且可以使用一些基本的理解。
在您的Bar
界面中,Outcome
指的是您在Bar
内声明的enum
成员。因此抽象方法doClick()
返回类型为Bar.Outcome
。
在您的Foo
班中,您声明了另一个enum
成员,也称为Outcome
。您在Bar
中错误声明的方法doClick
的返回类型为Foo.Outcome
。由于方法签名没有考虑到返回类型,因此您实际上有这种方法会导致编译错误,因为您有重复的方法。
您的doClick()
方法必须返回一个Bar.Outcome
对象来实现(满足)Bar
接口。
public Bar.Outcome doClick() {
return Bar.Outcome.NEW;
}
由于遮蔽
return Outcome.NEW;
的指的Foo.Outcome.NEW
这是Bar.Outcome
类型这是预期的返回类型的不。
我不知道为什么你声明了两个具有相同名称的枚举。
我试图实现一个已经包含这些字段的接口。它看起来像我能够避免调用Bar.Outcome doClick()如果我删除我的第二枚枚举声明。感谢您的帮助,这有助于我的理解! – user1695505
如果您给出enum不同的名字,那么您可以减少问题。 – Maroun
请不要将答案本身添加到问题陈述中;如果您首先解决问题,欢迎您回答自己的问题,并接受Sotirios的回答,您已经实质上标记了此问题。 –
Sotirios确实让我得到了正确的答案,所以我将他的答案标记为积分系统 - 但他的文章中的代码没有立即描述我的解决方案,所以我也发布了我的解决方案。我想我将来会不会这样做。 – user1695505