首页 > 解决方案 > 自引用泛型是否违反多态性?

问题描述

可以在 Java 中这样定义自引用类型

interface Foo<F extends Foo<F>> { F self(); }

这会将特定实现锁定Foo到其对应的类层次结构。即我不能再定义另一个Foo(通过再次实现这个接口)将与以前实现的兼容。

为什么这种行为是可取的?它违反多态性吗?

有问题的例子:

class X implements Foo<X> { ... }
class Y extends X { ... }

如果X被弃用,就不可能用Foo. 我必须同时提供一个新的实现Foo,重写Y和删除XXand的整个层次结构Y不能被另一个层次结构替换,因此违反了多态性。

标签: javagenerics

解决方案


推荐阅读