返回类型是不符合

问题描述:

我得到返回类型是不符合<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; 
} 

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

+0

如果您给出enum不同的名字,那么您可以减少问题。 – Maroun

+0

请不要将答案本身添加到问题陈述中;如果您首先解决问题,欢迎您回答自己的问题,并接受Sotirios的回答,您已经实质上标记了此问题。 –

+0

Sotirios确实让我得到了正确的答案,所以我将他的答案标记为积分系统 - 但他的文章中的代码没有立即描述我的解决方案,所以我也发布了我的解决方案。我想我将来会不会这样做。 – user1695505

在您的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类型这是预期的返回类型的不。

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

+0

我试图实现一个已经包含这些字段的接口。它看起来像我能够避免调用Bar.Outcome doClick()如果我删除我的第二枚枚举声明。感谢您的帮助,这有助于我的理解! – user1695505