博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala的bounds
阅读量:6800 次
发布时间:2019-06-26

本文共 1741 字,大约阅读时间需要 5 分钟。

  hot3.png

1、Upper Bounds

//upper bounds R >: Tclass Pair1[T](val first:T,val second:T){  def replaceFirst[R >: T](newFirst:R)= new Pair1(newFirst,second)}class Book(val name:String)class Ebook(name:String) extends Book(name)class Pbook(name:String) extends Book(name)object GenericDemo extends App{   val first = new Ebook("hello")   val second = new Pbook("paper book")      val p1 = new Pair1(first,second)   println(p1)      val newFirst = new Book("generic")   val p2 = p1.replaceFirst(newFirst)   println(p2)}

2、Lower Bounds

//lower bounds  T <: Mclass Pair[T <: Comparable[T]](val first:T,val second:T){  def smaller = {     if(first.compareTo(second) < 0)       first       else         second  }}object GenericDemo extends App{   val p = new Pair("A","B")   println(p.smaller)}

3、View Bounds

//view bounds,允许隐式转化,比如Int不支持Comparable但是RichInt支持class Pair3[T <% Comparable[T]](val first:T,val second:T){  def smaller = {     if(first.compareTo(second) < 0)       first       else         second  }}object GenericDemo extends App{   val idemo = new Pair3(1,2)   println(idemo.smaller)}

4、Context Bounds

// [T:M],T 隐式转换为 Mclass Pair[T : Ordering](val first : T, val second : T){  def smaller(implicit ord : Ordering[T]) =    if(ord.compare(first,second) < 0) first else second}class Line(val len : Double){  override def toString() = "Length of line : " + len}trait LineOrdering extends Ordering[Line] {  override def compare(x: Line, y: Line) =    if (x.len < y.len) -1    else if (x.len == y.len) 0    else 1}object ContextBounds extends App{  implicit object Line extends LineOrdering  val le1 = new Line(1.0)  val le2 = new Line(2.0)  val p = new Pair(le1,le2)  println(s"smaller => ${p.smaller}")}

转载于:https://my.oschina.net/scipio/blog/282809

你可能感兴趣的文章
linux常用命令
查看>>
jUnit测试
查看>>
[总结]-第四章 虚拟机性能监控与故障处理工具
查看>>
卡特兰数解释
查看>>
springboot linux下启动的脚本
查看>>
maven resource 记录
查看>>
cinder使用ceph,设置rbd_flatten_volume_from_snapshot的意义
查看>>
10-【MongoDB入门教程】 Journaling日志机制
查看>>
Linux ssh connection time setting
查看>>
Python入门(七) dict
查看>>
HTML5-GPS定位
查看>>
JavaSE——数组集合
查看>>
Git远程仓库
查看>>
java的LookupDispatchAction 用法
查看>>
多目标决策---化多为少的方法
查看>>
libevent 一个简单的event示例
查看>>
莫名故障
查看>>
Struts秘籍之第1段:第2.2式:关于标签库声明
查看>>
vscode cpp cmake 环境搭建
查看>>
android sdk manager无法更新
查看>>