博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Scala使用隐式转换进行比较
阅读量:6369 次
发布时间:2019-06-23

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

 Boy.scala

class Boy(val name: String, val faceValue: Int) extends Comparable[Boy]{  override def compareTo(o: Boy): Int = {    this.faceValue - o.faceValue  }}

 Girl.scala

class Girl(val name: String, val faceValue: Int, val size: Int) {}

  MissLeft.scala

//class MissLeft[T <% Ordered[T]] {////  def choose(first: T, second: T) : T = {//    if (first > second) first else second//  }////}class MissLeft[T : Ordering] {  def choose(first: T, second: T): T = {    val ord = implicitly[Ordering[T]]    if(ord.gt(first, second)) first else second  }}object MissLeft {  def main(args: Array[String]) {    import MyPreDef.girlOrdering    val ml = new MissLeft[Girl]    val g1 = new Girl("hatanao", 98, 28)    val g2 = new Girl("sora", 95, 33)    val g = ml.choose(g1, g2)    println(g.name)  }}

 

 MissRight.scala

class MissRight[T] {  def choose(first: T, second: T)(implicit ord : T => Ordered[T]): T = {    if(first > second) first else second  }  def select(first: T, second: T)(implicit ord : Ordering[T]): T ={    if(ord.gt(first, second)) first else second  }  def random(first: T, second: T)(implicit ord : Ordering[T]): T ={    import Ordered.orderingToOrdered    if(first > second) first else second  }}object MissRight {  def main(args: Array[String]) {    val mr = new MissRight[Girl]    val g1 = new Girl("hatanao", 98, 28)    val g2 = new Girl("sora", 95, 33)    import MyPreDef.girlOrdering    //val g = mr.choose(g1, g2)    val g = mr.select(g1, g2)    println(g.name)  }}

  MyPreDef.scala

object MyPreDef {  implicit def girlToOrdered(girl: Girl) = new Ordered[Girl]{    override def compare(that: Girl): Int = {      if(girl.faceValue == that.faceValue) {        girl.size - that.size      } else {        girl.faceValue - that.faceValue      }    }  }  implicit object girlOrdering extends Ordering[Girl] {    override def compare(x: Girl, y: Girl): Int = {      if(x.faceValue == y.faceValue) {        x.size - y.size      } else {        x.faceValue - y.faceValue      }    }  }}

 

 MrRight.scala

class MrRight[T] {  def choose[T <: Comparable[T]](first: T, second: T): T = {    if(first.compareTo(second) > 0) first else second  }}object MrRight {  def main(args: Array[String]) {    val mr = new MrRight[Boy]    val b1 = new Boy("zhangsan", 99)    val b2 = new Boy("lisi", 100)    val b = mr.choose(b1, b2)    println(b.name)  }}

 

转载于:https://www.cnblogs.com/DreamDrive/p/6736954.html

你可能感兴趣的文章
为啥神经网络里的BP算法花了那么久才被发明?
查看>>
iOS编程中throttle的那些事
查看>>
智能数据连接世界
查看>>
BMC报告:数字化业务驱动对大型机的需求
查看>>
签订数据中心托管合同所考虑的问题
查看>>
物联网时代的布局核心到底在哪里?
查看>>
秒懂数据统计、数据挖掘、大数据、OLAP的区别
查看>>
TCP是否适用与广域网环境?
查看>>
PHP语言开发Paypal支付demo的具体实现
查看>>
Java Executor 框架学习总结
查看>>
那些容易被忽视的JavaScript细节总结
查看>>
IBM首席执行官提出人工智能部署三大基本原则
查看>>
航空公司为何要超售机票?背后的利益竟然如此之大!
查看>>
横评:五款免费开源的语音识别工具
查看>>
大数据时代对国际非传统安全的新挑战
查看>>
MYSQL 创建函数出错的解决方案
查看>>
从APM角度上看:NoSQL和关系数据库并无不同
查看>>
中国光伏产业或将迎来新一轮的爆发式增长!
查看>>
都成为了中国女婿,小扎为什么还迈不过入华这道坎
查看>>
在非洲做生意是什么体验?《战狼2》只讲了冰山一角
查看>>