1.31
泛型
泛型
泛型的意思是 泛指某种具体的数据类型,在 Scala 中泛型用 [数据类型] 表示。
泛型方法
示例,定义一个泛型方法,获取任意数据类型的中间元素
def getMiddleElement[T](array: Array[T]): T = {array(array.length / 2)}
泛型类
示例,定义一个 Pair 泛型类,包含两个字段且字段类型不固定
class Pair[T](var a:T, var b:T)
泛型特质
trait Logger[T]{
val a:T
def show(b:T)
}
object ConsoleLogger extends Logger[String]{
override val a: String = "sjh"
override def show(b: String): Unit = println(b)
}
上下界
上界
使用 T <: 类型名 表示给类型添加一个上界,表示该类型必须是 T 或 T 的子类。
object ClassDemo {
class Person
class Student extends Person
def demo[T <: Person](array: Array[T]): Unit = println(array)
def main(args: Array[String]): Unit = {
demo(Array(new Person))
demo(Array(new Student))
demo(Array("a"))//报错
}
}
下界
使用 T >: 类型名 表示给类型添加一个下界,表示该类型必须是 T 或 T 的父类。
如果泛型既有上界又有下界,下界写在前面,[T >: A <: B]
协变、逆变、非变
协变:类 A 和 类 B 之间是父子类关系,Pair[A] 和 Pari[B] 之间也有父子关系。
class Pair[+T]{}
逆变:类 A 和 类 B 之间是父子类关系,但 Pair[A] 和 Pari[B] 之间是子父关系。
class Pair[-T]{}
非变:类 A 和 类 B 之间是父子类关系,Pair[A] 和 Pari[B] 之间没有任何关系。
class Pair[T]{} //默认类型是非变的
示例:
object ClassDemo {
class Super
class Sub extends Super
class Temp1[T]
class Temp2[+T]
class Temp3[-T]
def main(args: Array[String]): Unit = {
//测试非变
val t1:Temp1[Sub] = new Temp1[Sub]
//val t2:Temp1[Super] = t1 报错
//测试协变
val t3:Temp2[Sub] = new Temp2[Sub]
val t4:Temp2[Super] = t3
//测试逆变
val t5:Temp3[Super] = new Temp3[Super]
val t6:Temp3[Sub] = t5
}
}

浙公网安备 33010602011771号