标签:
具体可以参考:《Effective Java》PECS 原则 (producser-extends, consumer-super)
G[+A]类似一个生产者,提供数据。(大部分情况下称G为容器类型)同理函数的参数为何声明为逆变,返回值为协变就好理解了
G[-A] 是一个消费者,主要用来消费数据。(如上的 Equiv[-A] (其实就是个A => Boolean的函数,即Function1[-A, Boolean]))
参数逆变:正是因为需要符合里氏替换法则,方法中的参数类型声明时必须符合逆变(或不变),以让子类方法可以接收更大的范围的参数(处理能力增强);而不能声明为协变,子类方法可接收的范围是父类中参数类型的子集(处理能力减弱)。
返回值协变:如果结果类型是逆变的,那子类方法的处理能力是减弱的,不符合里氏替换。
标签:
原文地址:http://www.cnblogs.com/pyes/p/4907776.html