2009-11-06 54 views
3

我有以下類:摘要泛型類

public abstract class Step { 
    public abstract <S,T> S makeAStep(S currentResult, T element); 
} 

,我想實現它,所以它需要兩個int的並返回它們的總和,是這樣的:

public class sumOfInts extends Step { 
    public <Integer,Integer> Integer makeAStep(Integer currentResult, Integer element){ 
     return currentResult + element; 
    } 
} 

但我得到以下錯誤:

類型sumOfInts必須實現繼承的抽象方法Step.makeAStep(S,T)

請幫我(我需要爲我的編程語言課程的作業)

我要求很親切地對我寫代碼,做我想要完成它慣於 有任何錯誤或警告什麼 感謝在前面

+0

因爲它現在在工作,所以我建議你接受對你最有用的答案,可能會放棄投票回答有用的答案。 – KLE 2009-11-07 11:19:37

回答

11
public abstract class Step<S,T> { 
    public abstract S makeAStep(S currentResult, T element); 
} 

public class SumOfInts extends Step<Integer,Integer> { 
    // etc. 
+1

此外,Step類本身必須在類級別註冊此泛型的泛型才能工作,而不是在方法級別 – 2009-11-06 21:31:20

+0

@Jason +1我同意!我認爲你的評論對應於我剛纔寫的答案。 – KLE 2009-11-06 21:47:06

2

我同意喬納森的答案。


還有另一種可能性,下面給出,即不斷方法本身類型參數。

在這種情況下,這只是一個理論,因爲類和方法名稱暗示這對此示例沒有意義。
所以我更改名稱爲我的例子:

public abstract class Step { 
     public abstract <S,T> String makeAStep(S first, T second); 
    } 

    public class ConcatTwo extends Step { 
     public <S, T> String makeAStep(S first, T second){ 
     return String.valueOf(first) + String.valueOf(second); 
     } 
    } 

注:這工作,因爲操作使用String.valueOf(Object),對於任何類型(所有子類對象)的作品。對於另一個操作,我們將不得不限制S和T,例如使用類似
S extend Integer