泛型的邊界 <: 和 >:
符號 <:和>:都是用來表示泛型的邊界,如:
有以下類聲明:
class Animal
class Dog extends Animal
class ErHa extends Dog
聲明擁有泛型的類:
class MyList[V <: Dog]
說明: 泛型 V 必須是 Dog 類或者是 Dog 類的子類,即泛型的上邊界為 Dog 類
class MyList2[V >: Dog]
說明: 泛型 V 必須是 Dog 類或者是 Dog 類的父類,即泛型的下邊界為 Dog 類
示例代碼
class Animal
class Dog extends Animal
class ErHa extends Dog
class MyList[V <: Dog] // 泛型 V 是 Dog 或者是 Dog 的子類
class MyList2[V >: Dog] // 泛型 V 是 Dog 或者是 Dog 的父類
def main(args: Array[String]): Unit = {
val m1: MyList[Animal] = new MyList[Animal]() // Animal 是 Dog 的父類,出錯
val m2: MyList[Dog] = new MyList[Dog]()
val m3: MyList[ErHa] = new MyList[ErHa]()
val m4: MyList2[Animal] = new MyList2[Animal]()
val m5: MyList2[Dog] = new MyList2[Dog]()
val m6: MyList2[ErHa] = new MyList2[ErHa]() // ErHa 是 Dog 的子類,出錯
}
說明: 此例中泛型聲明都是 不變 的,所以聲明和賦值時類型要一致