隐式转换的一点想法

object App {
  implicit def toM2(m1:M1): M2 ={
    println("m1 to m2")
    new M2()
  }
  class M1 {
    def method1(): Unit ={
      println("invoke method 1")
    }
  }

  class M2() {
    def method2(): Unit ={
      println("invoke method 2")
    }
  }
  def main(args: Array[String]) {

   val m1 = new M1
    //m1本身有method1的方法,一次不需要调用隐式转换
    //输出  println("invoke method 1")
    m1.method1()


    //m1不存在method2 方法,需要在作用域中寻找隐式转换,正好发现有一个能把m1转换成m2,恰好m2有method方法,那么先执行转换方法,再执行method2
    //输出  println("m1 to m2") println("invoke method 2")
    m1.method2()


    //m1本身有method1的方法,一次不需要调用隐式转换
    //输出  println("invoke method 1")
    m1.method1()

    //m1不存在method2 方法,需要在作用域中寻找隐式转换,正好发现有一个能把m1转换成m2,恰好m2有method2方法,那么先执行转换方法,再执行method2
    //输出  println("m1 to m2") println("invoke method 2")
    //需要注意的是,这次又执行了转换方法,这意味着每次执行的独立性.
    m1.method2()


  }
}

 

posted on 2016-02-29 18:03  luckuan1985  阅读(180)  评论(0编辑  收藏  举报