Scala 泛型
一、协变和逆变
1、泛型语法
class MyList[+T] { }
//协变
class MyList[-T] { }
//逆变
class MyList[T] { }
//不变
2、语法说明
协变:Son 是 Father 的子类
,则MyList[Son] 也作为MyLIst[Father]的“子类”
。
逆变:Son 是 Father 的子类
,则MyList[Son] 也作为MyLIst[Father]的“父类”
。
不变:Son 是 Father 的子类
,则MyList[Father] 与 MyLIst[Son] 无父子关系
package Scala05_yichang
// 泛型
class test03_fanxing {
}
object test03_fanxing{
def main(args: Array[String]): Unit = {
//1、协变和逆变
val child:Parent = new Child //一个子类赋值给父类是可以的,这个是多态
val Listchild:MyList[Parent] = new MyList[Child] //要是是不变的话,那么这样不行,因为没有父子关系
}
}
//定义继承关系
class Parent{}
class Child extends Parent{}
class nextChild extends Child{} //这是第三代了
//定义泛型的集合类型
class MyList[+T]{
} //这泛型的字母自己可以随便定义的,一般是大写的字母
二、泛型上下限
1、语法
泛型上下限的作用是对传入的泛型进行限定
Class PersonList[T <: Person
]{} //泛型上限
Class PersonList[T >: Person
]{} //泛型下限
package Scala05_yichang
// 泛型
class test03_fanxing {
}
object test03_fanxing{
def main(args: Array[String]): Unit = {
//1、协变和逆变
val child:Parent = new Child //一个子类赋值给父类是可以的,这个是多态
val Listchild:MyList[Parent] = new MyList[Child] //要是是不变的话,那么这样不行,因为没有父子关系
//2、泛型上下限
//这个泛型的上限是Child 要是是Parent父类就超出了
def test[A <: Child](a:A):Unit={ //一般在函数里使用泛型都是在参数里面
println(a.getClass.getName)
}
test[Child](new Child)
}
}
//定义继承关系
class Parent{}
class Child extends Parent{}
class nextChild extends Child{} //这是第三代了
//定义泛型的集合类型
class MyList[+T]{
} //这泛型的字母自己可以随便定义的,一般是大写的字母
//