classPair[T](a:T)
object Pair{
def main(args: Array[String]): Unit ={
var p1 =newPair("HELLO")//编译报错,无法将p1转换为p2
var p2:Pair[AnyRef]=p1
println(p2)}}
协变
class Pair[+T],这种情况是协变。类型B是类型A的子类,Pair[B]可以认为是Pair[A]的子类型。这种情况,参数化类型的方向和类型的方向是一致的。
逆变
class Pair[-T],这种情况是逆变。类型B是A的子类,Pair[A]反过来可以认为是Pair[B]的子类型。这种情况,参数化类型的方向和类型的方向是相反的。
非变
class Pair[-T]{},这种情况是非变(默认),类型B是A的子类,Pair[A]和Pair[B]没有任何从属关系,这种情况和java是一样的。
classSuperclassSubextendsSuper//非变classTemp1[A](title:String)//协变classTemp2[+A](title:String)//逆变classTemp3[-A](title:String)
object Covariance{
def main(args: Array[String]): Unit ={
val a=newSub// 没有问题,sub是Super的子类
val b:Super=a
// 非变
val t1:Temp1[Sub]=newTemp1[Sub]("测试")// 默认不允许转换
val t2:Temp1[Super]= t1
//协变
val t3:Temp2[Sub]=newTemp2[Sub]("测试")
val t4:Temp2[Super]=t3
//逆变
val t5:Temp3[Super]=newTemp3[Super]("测试")
val t6:Temp3[Sub]=t5
}}