首先定義一個類 A,其參數類型 T 爲協變,類中包含一個方法 func,該方法有一個類型爲 T 的參數:html
1 class A[+T] { 2 def func(x: T) {} 3 }
此時在 x 處會有異常提示,covariant type T occurs in contravariant position in type T of value xweb
val father: A[AnyRef] = null.asInstanceOf[A[AnyRef]] // 父類對象,包含方法 func(x: AnyRef) val child: A[String] = null.asInstanceOf[A[String]] // 子類對象,包含方法 func(x: String)
1 def otherFunc(x: A[AnyRef]): Unit = { 2 x.func(Nil) 3 }
1 val fatherFather: A[Any] = null.asInstanceOf[A[Any]] // func(x: Any) 2 otherFunc(fatherFather)// 若是 T 爲協變,此處會提示異常
1 class B[+T] { 2 def func(): T = { 3 null.asInstanceOf[T] 4 } 5 } 6 // 與 Function0[+A] 等價
1 class A[-T] { 2 def func(x: T) {} 3 } 4 // 與 Function1[-A, Unit] 等價 5 6 val father: A[AnyRef] = null.asInstanceOf[A[AnyRef]] // func(x: AnyRef) 7 val fatherFather: A[Any] = null.asInstanceOf[A[Any]] // func(x: Any) 8 9 def otherFunc(x: A[AnyRef]): Unit = { 10 x.func(Nil) 11 } 12 13 otherFunc(father) // success 14 otherFunc(fatherFather)// success