2014-02-16 43 views
1

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

回答

4

在您的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

相關問題