scala上下界问题

今天看学习scala上下界,发现在理解下界 [>:] 这个有一点点问题,记录一下。

  • 先解释上下界,scala处处是泛型,函数基本也是泛型表示 ,类或者函数后面接一个中括号[T]来标识泛型类别T,类似C++泛型。
  • [R>:T]表示类型R至少比T类型要大,也就是说R至少是T的超类。
  • [R<:T]表示类型R至多为T,即R为T的子类/或者就是T类型。
object LowerBound extends App {

  val first = new Ebook("hello")
  val second = new Pbook("paper book")


  val p1: Pair1[Book] = new Pair1(first, second)
  println(p1)
  //scala> val p1 = new Pair1(first,second)
  //p1: Pair1[Book] = name--hello---name--paper book
  //Ebook,Pbook,最终得到的类是Pair1[Book]

  val newFirst = new Book("generic pBook")
  val p2 = p1.replaceFirst(newFirst)
  //p2: Pair1[Book] = name--generic pBook---name--paper book
  println(p2)


/*  下面可以编译通过,p1:Pair1[Book], p1.replaceFirst(),可知T为Book,R>:T,由此可知R至少为Book类型,
  而传入参数为WeirdBook,所以共同基类就是Book,推测R为Book类型,replaceFirst[Book>:Book](weirdFirst:Book)
  scala> val list = List(1, 2, 3)
  list: List[Int] = List(1, 2, 3)
  scala> val newList = "Hello" :: list
  newList: List[Any] = List(Hello, 1, 2, 3)*/

  val weirdFirst: WeirdBook = new WeirdBook("Weird pBook")
  val p3 = p1.replaceFirst(weirdFirst)
  println(p3)
  val p4: Pair1[Pbook] = new Pair1(second,second)
  val p6: Pair1[Pbook] =p4.replaceFirst(weirdFirst)
}

例子注释:为何val p3=p1.replaceFirst(weirdFirst)可以运行。类型变量界定建立在类继承层次结构的基础上,但有时候这种限定不能满足实际要求,如果希望跨越类继承层次结构时,可以使用视图界定来实现的,其后面的原理是通过隐式转换来实现,视图界定利用<%符号来实现。视图界定和上下界类似,不仅可以跨越类继承层次结构,还可以利用隐式转换来达到界定。
博客来源:http://blog.youkuaiyun.com/lovehuangjiaju/article/details/47264365
点此进入


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值