分享一个关于协变、逆变、不变的优秀回答
資深大佬 : JasonLaw 8
之前对于这几个概念没有一个深入的理解,这个回答真的解释得太好了。
关于数组是协变的,Jon Skeet 在Is List<Dog> a subclass of List<Animal>? Why are Java generics not implicitly polymorphic? – Stack Overflow中有这么一个评论。
大佬有話說 (5)
之前对于这几个概念没有一个深入的理解,这个回答真的解释得太好了。
关于数组是协变的,Jon Skeet 在Is List<Dog> a subclass of List<Animal>? Why are Java generics not implicitly polymorphic? – Stack Overflow中有这么一个评论。
而即使底层实现了类似的结构,如果是只出不进的队列,那 A 对于 QueueOut 是协变的,只进不出的队列,A 对于 QueueIn 是逆变的。
(这似乎和 traits 有点类似?接口的某些子集达成协变,某些子集达成逆变,合在一起就成了不变)
整套 OO 体系是混乱的。
滥用继承。
希望来点只能进行包裹、静态鸭子语言的 OO 语言。
顺便这需要语法糖来快速实现 this.some_method = this.wrapped_object.method
`convey wrapped_object.method as some_method`