2012-09-05 61 views
0

看看這個類的Java:抽象泛型類和方法重載爲了

abstract class LolCat<T> { 
    T execute() throws Err, Arr { 
     T lol = doSomething(); 
     if (lol == null) 
      lol = doSomething(); 

     return lol; 
    } 

    abstract T doSomething(); 
    abstract T doSomething() throws Err, Arr; 
} 

現在我們在一些有一個匿名實現任何方法的地方,這樣

final UhmLetsSayCat cat = new ImplLolCat<UhmLetsSayCat>() { 
    @Override 
    UhmLetsSayCat doSomething() { 
     return null; // somehow a UhmLetsSayCat is returned for real sometimes null 
    } 

    @Override 
    UhmLetsSayCat doSomething() throws Err,Arr { 
     return null; // really it does right thing, whatever 
    } 
}.execute(); 

現在我的問題的LolCat的是,第一次調用doSomething()的方法不會拋出Err,Arr,而是第二次調用,如果lol爲null,則運行拋出Err,Arr的doSomething實現。如何區分哪些方法運行!?

編輯:錯誤報警。我的天啊。我一定是整個晚上都失明瞭,其實有些方法的名字實際上不一樣,他們叫querryAll和QuerryAl1,我會找到那個做他並且打他的人。

編輯2:謝謝大家。

+3

它不編譯。我的猜測是,在你的真實代碼中,方法簽名(名稱或參數)是不同的。 –

+0

這是我編譯的類。它實際上是一個抽象類LolCat 裏面的一個公共類的東西。這有什麼區別嗎?匿名實現在Something中的方法中。 – rapadura

+0

借調。我得到'已經定義...' –

回答

6

您不能在類中聲明兩個具有相同簽名的方法。 throws子句,註釋和返回類型不計數。

abstract T doSomething(); 
abstract T doSomething() throws Err, Arr; // won't compile 

如果這樣編譯,編譯器會有一個錯誤。

1

你甚至不應該能夠編譯這個例子(錯誤:重複的方法doSomething()):在類型LolCat 重複的方法DoSomething的()

+0

對不起,但這是評論,而不是解決方案 – Pshemo

+0

在我看來這是一個解決方案,因爲問題甚至不存在 –

+0

好吧,看着它,你可能是對的。我的扭曲邏輯「如果沒有真正的問題在第一個地方 - >沒有真正的解決方案」失敗了我:) – Pshemo