Java泛型中的混乱

时间:2010-11-04 08:34:27

标签: java generics

我是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?,提前谢谢

5 个答案:

答案 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,这意味着YX使用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