interface Addable<E> {
public E add(E x);
public E sub(E y);
public E zero();
}
class SumSet<E extends Addable> implements Set<E> {
private E element;
public SumSet(E element) {
this.element = element;
}
public E getSum() {
return element.add(element.zero());
}
}
element.add()
似乎没有返回一个 E extends Addable
,而是一个 Object
。这是为什么?这与 Java 在运行时不知道对象类型到底是什么,所以它只是假设它们是对象(因此需要强制转换)有什么关系吗?
谢谢
最佳答案
尝试:
class SumSet<E extends Addable<E>> implements Set<E> {
我不知道这是否正是您的意思,但基本上问题是您在 SumSet
的声明中使用 Addable
作为原始类型。这剥离了所有通用参数类型并使 Addable
在 SumSet
中显示为:
interface Addable {
Object add(Object x);
Object sub(Object y);
Object zero();
}
显然 Object
不是 E
,因此会出现错误。参见 What is the raw type?来自 Java 泛型常见问题解答。
旁注 public
在接口(interface)定义中的方法上是不必要的。
关于java - 这段处理泛型的 Java 代码有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2657131/