黑猴子的家:Scala 多重界定

类型变量可以同时有上界和下界。写法为

T >: Lower <: Upper

不能同时有多个上界或下界,不过,我们依然可以要求一个类型实现多个特质,就像这样

T <: Comparable[T] with Serializable with Cloneable

可以有多个上下文界定

T : Ordering : ClassTag

变通的方式是使用复合类型
T <: A with B
T >: A with B
可以同时有上界和下界,如
T >: A <: B
这种情况下界必须写在前边,上界写在后边,位置不能反。同时A要符合B的子类型,A与B不能是两个无关的类型。
可以同时有多个view boundsc
T <% A //T这个类型是可以隐士转换成A类型,是可以没有继承关系的,隐式转换表示类是不在继承线上的,可以是不同类型,只需要使用隐式转换,转换一下就可以了,怎么转呢?两个类不是同一个类,也没有继承关系,就把原来的那个类拆开,把数据取出来,再创建另一个类型的对象,把取出来的数据塞进去,这就是隐式的类型转换
T <% A <% B
这种情况要求必须同时存在 T=>A的隐式转换,和T=>B的隐式转换。

class A{}
class B{}
implicit def string2A(s:String) = new A
implicit def string2B(s:String) = new B
def foo2[ T <% A <% B](x:T)  = println("foo2 OK")
foo2("test")

可以同时有多个上下文界定
T : A : B
这种情况要求必须同时存在C[T]类型的隐式值,和D[T]类型的隐式值

class C[T];
class D[T];
implicit val c = new C[Int]
implicit val d = new D[Int]
def foo3[ T : C : D ](i:T) = println("foo3 OK")
foo3(2)

你可能感兴趣的:(黑猴子的家:Scala 多重界定)