小编JJW*_*432的帖子

使用Java中的泛型保证协变返回类型

我有一个名为的类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)

在一个单独的课程中,我想利用PointSpecialPoint使用泛型

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 …

java generics

17
推荐指数
1
解决办法
1070
查看次数

标签 统计

generics ×1

java ×1