首页  

scala 泛型 上下界 非变 协变 逆变     所属分类 scala 浏览量 829
def getMiddleElement[T](array:Array[T]) = array(array.length / 2)
getMiddleElement(Array(1, 2, 3))
getMiddleElement(Array("a", "b", "c"))
    
case class Pair[T](var a:T, var b:T)
   
val pairList = List(Pair("hello", "scala"),Pair(1.0, 2.0),Pair(1, 2))


泛型的上下界 上界 泛型参数为 该类 或 其子类型 [T <: 类型] 下界 [T >: 类型] class Animal class Pet extends Animal class Cat extends Pet def upBoundTest[T <: Pet](array:Array[T]) = println(array) def lowBoundTest[T >: Pet](array:Array[T]) = println(array) upBoundTest(Array(new Pet)) upBoundTest(Array(new Cat)) // // upBoundTest(Array(new Animal)) lowBoundTest(Array(new Animal)) lowBoundTest(Array(new Pet)) // lowBoundTest(Array(new Cat))
非变 协变 逆变 非变 class Pair[T]{} 默认泛型类 非变 类型B是A的子类型,Pair[A]和Pair[B]没有任何从属关系 Java是一样的 协变 class Pair[+T] 类型B是A的子类型,Pair[B]可以认为是Pair[A]的子类型 参数化类型的方向和类型的方向一致 逆变 class Pair[-T] 类型B是A的子类型,Pair[A]反过来可以认为是Pair[B]的子类型 参数化类型的方向和类型的方向相反 class Super class Sub extends Super class Temp1[T] class Temp2[+T] class Temp3[-T] val a:Temp1[Sub] = new Temp1[Sub] // 非变 编译错误 //val b:Temp1[Super] = a // 协变 val c: Temp2[Sub] = new Temp2[Sub] val d: Temp2[Super] = c // 逆变 val e: Temp3[Super] = new Temp3[Super] val f: Temp3[Sub] = e

上一篇     下一篇
temporal local activity vs activity

temporal 一些关键概念

CompletableFuture 实例

temporal Workers 为何使用轮询拉取任务

temporal list namespace 调试 堆栈信息

vscode 使用技巧