泛型与型变
在强类型语言中,即使是使用泛型,我们也会希望能够对类型做一些限制,这些限制的一类称为型变。它回答的问题包括了两个方面:
- 给我一个对象,这个对象必须是某种类型(当然子类型也是可以的,这可不就是面向对象编程的最基本的要求么),这是对生产者的要求;【协变】
- 给你一个对象,你能不能吃得下。这是对消费者的要求【逆变】
协变
协变的意义在于如果我能够处理基类,你【生产者】给我一个子类对象,我也能够处理,我只是把它当作基类对象处理了。
逆变
逆变的意义在于我要求你能够处理某种类型,但是显然,我并不会要求你能够处理子类型,因为子类型可能会有无穷多,你【消费者】可能处理不了,但是如果你能够处理基类,最多你把我给你的对象当作基类对象处理就行了。也就是说对消费者的要求是:能够处理某种类型,或者它的基类(随便哪一层就可以)。
网友评论