天天看點

scala 的上界下界一、泛型二、上界和下界

目錄

一、泛型

(1)泛型的介紹

(2)泛型類、泛型方法

(3)示例

1)定義泛型類

2)定義泛型方法

二、上界和下界

(1)介紹

(2)示例

1)上界示例

2)下界示例

一、泛型

總結:T <: Comparable[T] 表示T比Comparable年齡小,是以T必須為Comparable的子類。相反,T >: Son,T為Son的父類。

(1)泛型的介紹

泛型用于指定方法或類可以接受任意類型參數,參數在實際使用時才被确定,泛型可以有效地增強程式的适用性,使用泛型可以使得類或方法具有更強的通用性。

(2)泛型類、泛型方法

泛型類:指定類可以接受任意類型參數。 

泛型方法:指定方法可以接受任意類型參數。

(3)示例

1)定義泛型類

/* 下面的意思就是表示隻要是Comparable就可以傳遞,下面是類上定義的泛型
  */
class GenericTest1[T <: Comparable[T]] {
 
  def choose(one:T,two:T): T ={
    //定義一個選擇的方法
    if(one.compareTo(two) > 0) one else two
  }
 
}
 
class Boy(val name:String,var age:Int) extends Comparable[Boy]{
  override def compareTo(o: Boy): Int = {
    this.age - o.age
  }
}
 
object GenericTestOne{
  def main(args: Array[String]): Unit = {
    val gt = new GenericTest1[Boy]
    val huangbo = new Boy("huangbo",60)
    val xuzheng = new Boy("xuzheng",66)
    val boy = gt.choose(huangbo,xuzheng)
    println(boy.name)
  }
}
           

運作結果:

scala 的上界下界一、泛型二、上界和下界

2)定義泛型方法

class GenericTest2{
  //在方法上定義泛型
  def choose[T <: Comparable[T]](one:T,two:T): T ={
    if(one.compareTo(two) > 0) one else two
  }
 
}
 
class Boy(val name:String,var age:Int) extends Comparable[Boy]{
  override def compareTo(o: Boy): Int = {
    this.age - o.age
  }
}
 
object GenericTestTwo{
  def main(args: Array[String]): Unit = {
    val gt = new GenericTest2
    val huangbo = new Boy("huangbo",60)
    val xuzheng = new Boy("xuzheng",66)
    val boy = gt.choose(huangbo,xuzheng)
    println(boy)
  }
}
           

運作結果:

scala 的上界下界一、泛型二、上界和下界

二、上界和下界

(1)介紹

在指定泛型類型時,有時需要界定泛型類型的範圍,而不是接收任意類型。比如,要求某個泛型類型,必須是某個類的子類,這樣在程式中就可以放心的調用父類的方法,程式才能正常的使用與運作。此時,就可以使用上下邊界Bounds的特性; 

Scala的上下邊界特性允許泛型類型是某個類的子類,或者是某個類的父類;

(1) S <: T

這是類型上界的定義,也就是S必須是類型T的子類(或本身,自己也可以認為是自己的子類)。

(2) U >: T

這是類型下界的定義,也就是U必須是類型T的父類(或本身,自己也可以認為是自己的父類)。

(2)示例

1)上界示例

參考上面的泛型方法

2)下界示例

class GranderFather
class Father extends GranderFather
class Son extends Father
class Tongxue

object Card{
  def getIDCard[T >: Son](person:T): Unit ={
    println("OK,交給你了")
  }
  def main(args: Array[String]): Unit = {
    getIDCard(new Father)
    getIDCard(new GranderFather)
    getIDCard(new Son)
    //getIDCard[GranderFather](new Tongxue)//報錯,是以注釋

  }
}
           

 結果:

scala 的上界下界一、泛型二、上界和下界