摘要: 限定泛型能构造出什么样的类型; 限定构造器的参量是哪些类型; 和构造出的类型能够使用哪些功能。 类型约束(type constraint)进一步控制了可指定的类型实参,当我们创建自己的泛型类型或者泛型方法的时候,类型约束是很有用的。 bounded parameter 类型约束:通过特定的语法描述参 阅读全文
posted @ 2019-08-29 16:49 zzfx 阅读(367) 评论(0) 推荐(0)
摘要: 函数类型与型变 型变描述了符合里氏替换原则的相关类型,在经过型变后是否符合和怎样符合里氏替换原则的特征。 经过类型构造后生成新的类型。 型变本身是类型构造器。 型变描述了构造器的特征; 继承中的协变逆变: c++、java、scala都支持返回值协变,也就是说在继承层次中子类覆盖超类的方法时,可以指 阅读全文
posted @ 2019-08-29 15:41 zzfx 阅读(248) 评论(0) 推荐(0)
摘要: 另一个可以帮助理解型变的例子是 Scala 标准库中的 trait Function1[-T, +R]。 Function1 表示具有一个参数的函数,其中第一个类型参数 T 表示参数类型,第二个类型参数 R 表示返回类型。 Function1 在其参数类型上是逆变的,并且在其返回类型上是协变的。 对 阅读全文
posted @ 2019-08-29 14:40 zzfx 阅读(426) 评论(0) 推荐(0)
摘要: 型变是复杂类型的子类型关系与其组件类型的子类型关系的相关性。 Scala支持 泛型类 的类型参数的型变注释,允许它们是协变的,逆变的,或在没有使用注释的情况下是不变的。 在类型系统中使用型变允许我们在复杂类型之间建立直观的连接,而缺乏型变则会限制类抽象的重用性。 class Foo[+A] // A 阅读全文
posted @ 2019-08-29 14:28 zzfx 阅读(154) 评论(0) 推荐(0)
摘要: 泛型:类型构造器; 类型构造过程:具体类型; 类型约束:类型约束与类型推断 区分是类型构造器本身还是在构造具体类型 阅读全文
posted @ 2019-08-29 11:37 zzfx 阅读(193) 评论(0) 推荐(0)