2009-11-06 59 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