我遇到了这个问题:
public interface Node {
public<T extends Node> T copy();
}
public class Point2D implements Node {
@Override
public <T extends Node> Point2D copy() {
return new Point2D(this);
}
}
为什么我会The return type is incompatible with Node.copy()
? Point2D实现Node,如何让错误消失保持返回的类型?
如果我把T替换为Point2D copy()我得到“类型不匹配:无法从Point2D转换为T”这是愚蠢的,因为T被定义为扩展Point2D的类
由于
答案 0 :(得分:0)
您不需要{child} <T extends Node>
子级别的T
声明
简单地使用
public class Point2D implements Node {
@Override
public Point2D copy() {
return new Point2D(this);
}
}
答案 1 :(得分:0)
在这种情况下,您不需要使用类型变量。 Java允许您在重写方法中专门化返回类型。也就是说,以下工作:
public interface Node {
public Node copy();
}
public class Point2D implements Node {
@Override
public Point2D copy() {
return new Point2D(this);
}
}
这可行的原因是Node
接口指定copy()
方法返回Node
实例。类Point2D
的{{1}}方法确实返回copy()
的实例;实际上,它返回子类型Node
的实例。