泛型的说明:泛型类指可以接受类型参数的类,泛型类在集合类中被广泛使用
与Java不同,定义泛型类使用“[]”
泛型方法
import scala.collection.mutable.ListBuffer
class MyTt {
//泛型方法
def abc[T](t:T)={
val list1:ListBuffer[T]=ListBuffer[T]()
list1
}
}
object Test{
def main(args: Array[String]): Unit = {
val tt = new MyTt
//当传的是String类型时ListBuffer就是String类型
val res = tt.abc("ss")
println(res.isInstanceOf[ListBuffer[String]])//true
}
}
当泛型定义在方法上时就是泛型方法
泛型类
//泛型类
class MyTt1[T]{
def abc(t:T)={
println(t.isInstanceOf[String])
}
}
object Test1{
def main(args: Array[String]): Unit = {
val tt = new MyTt1[Int]
val tt1 = new MyTt1[String]
//只能传Int类型的数值
tt.abc(2)//false
//只能传String类型的数值
tt1.abc("ss")//true
}
}
上界与下界
scala中上界
在 scala 里表示某个类型是 A 类型的子类型,也称上界或上限,使用 <: 关键字,语法如下:
[T <: A]
scala中下界
在 scala 的下界或下限,使用 >: 关键字,语法如下:
[T >: A]
class Father { def read()={}}
class Son extends Father{}
class MyTt2{
//T是Father的类或子类,上界是Father
def abc[T<:Father](t:T)={
println("成功")
}
//下界可以传入任意类型,没什么意义
def abcd[T>:Object](t:T)={
println("成功1")
}
}
object Mytest{
def main(args: Array[String]): Unit = {
val tt = new MyTt2
tt.abc(new Father)
tt.abcd(new Father)
}
}