我是Java的初学者,我正在尝试编译一些小程序,有人可以解释一下,我的问题是什么,提前谢谢:
public abstract class SumFunction<Y,X> {
public abstract Y op (Y y, X x);
}
public class sumStringToInt extends SumFunction{
public int op(int num, String s){
return s.length() + num;
}
}
Multiple markers at this line
- The type sumStringToInt must implement the inherited abstract method SumFunction.op(Object,
Object)
- SumFunction is a raw type. References to generic type SumFunction<Y,X> should be
parameterized
是否可以在没有实例化基类的情况下继承Java?,提前谢谢
答案 0 :(得分:5)
您表示SumFunction<Y,X>
正在接受两个参数。
因此,您的课程应该如下所示:
public class sumStringToInt extends SumFunction<Integer,String> {
public Integer op(Integer num, String s){
return s.length() + num;
}
}
试试......
答案 1 :(得分:4)
应该是
public class sumStringToInt extends SumFunction<Integer,String>{
public Integer op(Integer num, String s){
return s.length() + num;
}
}
答案 2 :(得分:1)
扩展SumFucntion
时未指定类型参数。 sumStringToInt
需要延长SumFunction<Integer,String>
。
此外,您不能在泛型中使用基元。因此,请使用Integer
代替int
。
答案 3 :(得分:1)
public class sumStringToInt extends SumFunction<Integer, String>
{
@Override
public Integer op(int num, String s)
{
return s.length() + num;
}
}
答案 4 :(得分:0)
您缺少SumFunction的类型参数。因此,编译器假定您要使用raw type
,这意味着Y
和X
使用Object
作为其类型。
public class sumStringToInt extends SumFunction{
public int op(int num, String s){
return s.length() + num;
}
}
如果传递要用于SumFunction的类型,则应编译。像这样:
public class sumStringToInt extends SumFunction<Integer, String> {
public int op(int num, String s){
return s.length() + num;
}
}
您可能已经注意到我们使用Integer
而不是int
作为类型。这是因为您不能将原始类型与泛型一起使用。幸运的是,每种基本类型都有包装器对象,在这种情况下Integer
用于int
。