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
}

}

posted @ 2025-02-07 13:58  七安。  阅读(15)  评论(0)    收藏  举报