upper bounds
上界
- 标识: <:
|
|
lower bounds
下界
- 标识: >:
|
|
view bounds
- 标识 <%
- <% 的意思是 “view bounds” (视界),它比 <: 适用的范围更广,除了所有的子类型,还允许隐式转换过去的类型
- 适用于 方法与类 ,但是不适用于 trait(特征)
|
|
context bounds
mutiple bounds
不能同时有多个upper bounds 或 lower bounds,变通的方式是使用复合类型
|
|
可以同时有upper bounds 和 lower bounds
|
|
这种情况 lower bounds 必须写在前边,upper bounds写在后边,位置不能反。同时A要符合B的子类型,A与B不能是两个无关的类型。
可以同时有多个view bounds
|
|
这种情况要求必须同时存在 T=>A的隐式转换,和T=>B的隐式转换。
|
|
可以同时有多个context bounds
|
|
这种情况要求必须同时存在A[T]类型的隐式值,和B[T]类型的隐式值。
|
|
协变、逆变
如果一个类型是协变或者逆变的,那么这个类型即为可变-variance类型,否则为不可变-invariance的。
在类型定义申明时,+
表示协变,-
表示逆变
协变:covariance
|
|
如 A 继承 B,便有 List[A] 继承 List[B]
逆变:contravariance
如 A 继承 B,便有 List[B] 继承 List[A]
要注意 variance 并不会被继承,父类声明为 variance,子类如果想要保持,仍需要声明:
|
|
必须也对 C 声明为协变的才行:
|
|
=> 在 scala 中的含义
- 匿名函数定义, 左边是参数,右边是函数实现体:(x: Int)=>{}
- 函数类型的声明,左边是参数类型,右边是方法返回值类型:(Int)=>(Int)
- By-name-parameter:f(p :=>Int)
- case 语句中 case x => y