scala 上下文界定 解释

啥都不说,先上代码

class CompareComm1[T: Ordering](obj1: T, obj2: T)(implicit comparetor: Ordering[T]) {
  // 看到def 那就是一个方法,这个方法没有入参,返回了一个 T 类型的对象  
  def geatter = if (comparetor.compare(obj1, obj2) > 0) obj1 else obj2
}

//一个普通的Person类
class Person(val name: String, val age: Int) {
  override def toString = this.name + "\t" + this.age
}

object ContextBounds {

  //定义了一个隐式值  类型是:Ordering[Person]
  implicit val personComparetor = new Ordering[Person] {
    override def compare(p1: Person, p2: Person): Int =
      p1.age - p2.age
  }
  def main(args: Array[String]): Unit = {
    val p1 = new Person("mary", 30)
    val p2 = new Person("smith", 35)

    val compareComm1 = new CompareComm1(p1, p2)
    println(compareComm1.geatter)
  }
}

格式是 [A:B]

A是一个泛型,B是一个具体的类或者接口

也就是说这个A 有B的特性,如果B是一个接口,那么A 也就有这个接口的特性?表示A has B?

上面这句话是错的,A并没有B的特性,也不是B的子类

可以看到上面的示例中,这里的泛型A 表示 Person,B表示 Ordering

但是person 并没有实现B接口

那到底B表示啥?作用是什么?

B是用来对A做操作的,调用B实例的方法去操作A的实例

于是就有 B[A] 这样的类型,表示具体的类型B 他的泛型是A

这么做的目的是为了,调用B实例的方法去操作A的实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值