我正在看例子。
public interface Visitor<T> {
public void visit(T e);
}
class Sum<T extends Integer> implements Visitor<T> {
private int sum = 0;
@Override
public void visit(T element) {
sum += element;
}
public T value() {
return sum;
}
}
return 语句 T value() return sum 给出错误,指出类型不匹配:无法从 int 转换为 T。为什么会这样以及如何解决问题。
最佳答案
你的情况有两个问题:
T extends Integer
并不完全有效,因为Integer
无法扩展,即它是一个final
类。因此,您可以安全地将类声明更改为class Sum implements Visitor<Integer> { ...
其次,
T value()
方法不是接口(interface)的一部分,因此不需要(不应该)是T
类型。您可以安全地将其替换为public int value()
或public Integer value()
。
因此,生成的代码将如下所示:
class Sum implements Visitor<Integer> {
private int sum = 0;
@Override
public void visit(Integer element) {
sum += element.intValue();
}
public int value() {
return sum;
}
}
关于java - 泛型返回类型不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8959263/