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)
  }
}

运行结果:

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)
  }
}

运行结果:

二、上界和下界


(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)//报错,所以注释

  }
}

 结果:

发布了159 篇原创文章 · 获赞 75 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/xuehuagongzi000/article/details/102825405
今日推荐