Scala之旅-隐式转换

下面简要地介绍下scala的三种隐式类型,如果你熟悉C#中的扩展类,哪你应该会熟悉隐式类和隐式方法,没错,他们都是对一个类的方法进行扩展的


1.隐式类

隐式类和C#的类扩展基本一样,它是在scala2.10中引入的,具体看下面的例子

比如我们要为scala的Int类添加一个add()方法

//scala2.10隐式类-为Int添加了一个扩展方法add
  implicit class Calculator(var a: Int) {
    def add(x: Int): Int = {
      a + 1
    }
  }

  def demo01(): Unit = {
    println(1.add(2)) //可以直接使用
  }

2.隐式方法

其实它的功能和隐式类一样,我猜隐式类就是用来取代它的
//*************隐式转换*********
  //原始的类A没有任何方法
  class A {

  }

  //扩展类A的类
  class ExtendA(a: A) {
    def show(): Unit = {
      println("扩展类A的类的方法show")
    }
  }

  def demo02(): Unit = {
    //这是一个固定的形式
    //implicit def funtion(instance:class)=new ExtendClass(instance)
    implicit def a2Extend(a: A) = new ExtendA(a);
    val a = new A()
    a.show()
  }
这里比较重要
 implicit def funtion(instance:class)=new ExtendClass(instance)


3.隐式参数

和默认参数有点类似,但又有点区别
 //隐式参数 implicit只能存在一个且位于第一个参数
  def testImplicitPara(implicit name:String): Unit ={
    println(name)
  }

  def demo03(): Unit ={
    //这里也只能存在一个implicit,命名无所谓啦
    implicit var name1="implicit.1!"
    //implicit var name2="implicit.2!"
    testImplicitPara //之前没有implicit会报错
    testImplicitPara("clow")
  }






你可能感兴趣的:(Scala之旅-隐式转换)