java - 自引用泛型是否违反多态性?
问题描述
可以在 Java 中这样定义自引用类型
interface Foo<F extends Foo<F>> { F self(); }
这会将特定实现锁定Foo
到其对应的类层次结构。即我不能再定义另一个Foo
(通过再次实现这个接口)将与以前实现的兼容。
为什么这种行为是可取的?它违反多态性吗?
有问题的例子:
class X implements Foo<X> { ... }
class Y extends X { ... }
如果X
被弃用,就不可能用Foo
. 我必须同时提供一个新的实现Foo
,重写Y
和删除X
。X
and的整个层次结构Y
不能被另一个层次结构替换,因此违反了多态性。
解决方案
推荐阅读
- javascript - JavaScript 中的乘法问题
- android - SingleChildScrollView ,子列上的空格问题
- javascript - D3.js:测量帧速率
- java - ServletContextListener 和静态块
- javascript - firebase db splice 类似操作
- javascript - 我怎样才能使这个按钮文本允许您输入图片但在上传图片时消失并在您不选择照片时返回?
- c# - BindingExtension 如何知道其有效的绑定上下文?
- reactjs - Firebase UI 回调中的 signInSuccessWithAuthResult 返回值
- javascript - 除了警报弹出框外,如何在 javascript 的客户端显示 onsubmit 验证消息?
- visual-c++ - 在 NumericUpDown 控件上单击并按住按钮:如何停止 ctrl 加速