scala 泛型 上界

scala的泛型本质上和java是一样的,只不过语法不一样。

它有以下几种用法:

T<:B,上界,表示T是B的子类

T>:B,下界,表示T是B的老爹

B<%A,viewBound,表示表要转化成A,但要有一个隐式转换函数

B:A,contextBound,需要一个隐式转换的值,啥意思 ?

[-A,+B]

-A,逆变,表示参数类型,如果A是B的子类,则C[B]是C[A]的子类,反转了

+B,表示是返回类型,如果A是B的子类,则则C[A]仍然是C[B]的子类

 

上界举例:选择女神

1、新建女神类

class MissRight(val name: String, val faceValue: Int) extends Comparable[MissRight] {//必须定义为val时,才被识别为类的属性
  //这地方入参不能是T,T必须是在源中的
  override def compareTo(o: MissRight): Int = {
    this.faceValue - o.faceValue
  }
}

2、新建UpperBoundDemo类,它有一个select女神的方法

class UpperBoundDemo[T <: Comparable[T]] {//构造方法要不要用,但是Comparable后面必须要加T
  def select(m1:T,m2:T): T ={
    if(m1.compareTo(m2)>0) m1 else  m2
  }
}

注意:Comparable[T]后面必须加一个T

3、新建main

object UpperBoundDemo {
  def main(args: Array[String]) {

    val u=new UpperBoundDemo[MissRight]
    val m1=new MissRight("biaozi",120)
    val m2=new MissRight("erdiao",999)
    val res=u.select(m1,m2)
    println(res.name)

  }
}

 

转载于:https://my.oschina.net/windows20/blog/1795625

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值