美文网首页
范型和implicit

范型和implicit

作者: 博瑜 | 来源:发表于2017-06-12 00:16 被阅读0次
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
      }
    }
  }

}


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)
  }
}


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)
  }
}

相关文章

  • 范型和implicit

  • CoreJava笔记 - 范型程序设计(2)

    范型代码和Java虚拟机 关键知识:类型擦除Java的范型是编译器层次的范型,而在Java虚拟机上并没有范型类。在...

  • 条款45: 运用成员函数模板接受所有兼容类型

    真实指针做得很好的一件事是,支持隐式转换(implicit conversions)。 Templates和泛型编...

  • Scala的隐式转换和参数

    Key Words: Implicit conversions, Implicit parameters, Imp...

  • 范型

    <:上界 >:下界 <%视图定界 一定要传隐式转换函数 T隐式转换成order[T][T<%M]关系意味着...

  • 范型

    范型就是不指定类型,用的时候在指定类型使用场景 用在构造函数中

  • 范型

    泛型是jdk1.5使用的新特性。 泛型的好处:1. 将运行时的异常提前至了编译时。2. 避免了无谓的强制类型转换 ...

  • 范型

  • Objective-C 范型

    系统库范型 Objective C支持轻量级的范型。在编写自定义的范型类之前,我们先来看看Cocoa Touch的...

  • Angular: ng-templates中的 $implici

    $implicit 有什么用? $implicit 和let-之间是什么关系 我们可以通过let-name在ng-...

网友评论

      本文标题:范型和implicit

      本文链接:https://www.haomeiwen.com/subject/ccvkqxtx.html