我有一个名为的类Point,其方法neighbors()返回一个Points 数组:
public class Point {
public Point[] neighbors() { /* implementation not shown */ }
}
Run Code Online (Sandbox Code Playgroud)
我有一个子类Point,称为SpecialPoint覆盖neighbors()返回一个SpecialPoints而不是Points 的数组.我认为这称为协变返回类型.
public class SpecialPoint extends Point {
public SpecialPoint[] neighbors() { /* implementation not shown */ }
}
Run Code Online (Sandbox Code Playgroud)
在一个单独的课程中,我想利用Point和SpecialPoint使用泛型
public <P extends Point> P doStuff(P point) {
P[] neighbors = point.neighbors();
// more stuff here including return
}
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为编译器只能保证它P是某个子类Point …