我在阅读泛型时遇到了PECS(制片extends人和消费者的super简称).
能否给我一个人解释如何使用佩奇之间解决困惑extends和super?
今天,我在Java中阅读了一些关于Covariance,Contravariance(和Invariance)的文章.我阅读了英文和德文维基百科的文章,以及IBM的一些其他博客文章和文章.
但我对这些究竟是什么有点困惑?有人说,它是关于类型和子类型之间的关系,也有人说,它是关于类型转换和一些说,它是用来决定一个方法是否重载或超载.
所以我正在用简单的英语寻找一个简单的解释,它向初学者展示了Covariance和Contravariance(和Invariance).加上一点简单的例子.
在Java中,协方差允许API设计者指定实例可以被概括为某种类型或任何该类型的子类型.例如:
List<? extends Shape> shapes = new ArrayList<Circle>();
// where type Circle extends Shape
Run Code Online (Sandbox Code Playgroud)
反方差则是另一种方式.它允许我们指定实例可以概括为某种类型或超类型.
List<? super Shape> shapes = new ArrayList<Geometry>();
// where Shape extends Geometry
Run Code Online (Sandbox Code Playgroud)
Java泛型的逆变是如何有用的?你什么时候选择使用它?