Scala类型参数——泛型之逆变
2017-10-29 15:03
281 查看
/** * 逆变,也是Scala中一种比较特殊的功能,它也完美的解决了在Java中泛型的一大缺憾。 * 比如,Professor02是Master02的子类,那么Card[Professor02]是不是Card[Master02]的子类? * 这个在Java中是 不是的,但是在Scala中因为逆变、协变这个特色功能的存在,它就是其子类。 * 逆变其实就是泛型类下边界的加强版。 */ class Master02 class Professor02 extends Master02 class Teach02 extends Master02 //这个是逆变,只能是Card02[T]及其Card02[T]子类 class Card02[-T] class ContravariantDemo { //只能是Card02[Teach02]及其Card02[Teach02]的子类Card[Master02] def enterMeet(card: Card02[Teach02]): Unit = { println("只能是讲师及其上一级别的人,才能进入会场!") } } object ContravariantDemo { def main(args: Array[String]): Unit = { val masterCard = new Card02[Master02] val professorCard = new Card02[Professor02] val teacherCard = new Card02[Teach02] val cont = new ContravariantDemo cont.enterMeet(masterCard) cont.enterMeet(teacherCard) //此处就会报错 // cont.enterMeet(professorCard) } }
相关文章推荐
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- 在Scala中,为什么函数的参数类型是逆变的,而函数的返回值协变的
- Scala类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- scala 泛型之初解,定界,类型约束,逆变与协变
- Scala入门到精通——第二十一节 类型参数(三)-协变与逆变
- 编写高质量代码改善C#程序的157个建议——建议45:为泛型类型参数指定逆变
- Scala类型参数——泛型之协变
- Programming In Scala笔记-第十九章、类型参数,协变逆变,上界下界
- Scala入门到精通——第二十一节 类型参数(三)-协变与逆变
- Programming In Scala笔记-第十九章、类型参数,协变逆变,上界下界
- [译]委托和接口泛型参数类型的协变和逆变
- scala学习笔记-类型参数中协变(+)、逆变(-)、类型上界(<:)和类型下界(>:)的使用
- 建议45:为泛型类型参数指定逆变
- c# 泛型中类型参数约束 之 主约束的解读
- 快学Scala第17章----类型参数
- 泛型约束where条件的使用(可以通过类型参数动态反射创建实例)
- More Effective C# Item3 : 运行时检查泛型参数的类型并提供特定的算法
- 【Scala类型系统】隐式转换与隐式参数