码迷,mamicode.com
首页 > 其他好文 > 详细

scala中隐式转换之隐式类

时间:2017-12-07 21:02:19      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:nbsp   定义   root   范围   就会   incr   extends   st3   hello   

/**
  * Created by root
  * Description :隐式类:
  * 1.其所带的构造参数有且只能有一个;并且构造器的参数是转换之前的对象
  * 2.隐式类必须被定义在类,伴生对象和包对象里
  * 3.隐式类不能是case class(case class在定义会自动生成伴生对象与2矛盾)
  * 4.作用域内不能有与之相同名称的标示符
  */

class ImplicitTest3 {
    def getName = "ImplicitTest3"
}

object ImplicitUtils {
  implicit class StringImprovement(val s : String){   //隐式类
    def increment = s.map(x => (x +1).toChar)
    def toMore = (s.length,s.substring(1,3),s.contains("a"))
  }

  implicit class IntImprovement(val a : Int){   //隐式类
    def square = a * a
    def cube = a * a * a
  }

  implicit class ImplicitTest3Improvement(val im : ImplicitTest3){   //隐式类
    def getImName = im.getName
  }
}
object  Main extends  App{
  import ImplicitUtils._
  println("hello".increment)  // 编译器在hello对象调用increment时发现对象上并没有increment方法,此时编译器就会在作用域范围内搜索隐式实体,
                              // 发现有符合的隐式类可以用来转换成带有increment方法的StringImprovement类,最终调用increment方法。
  println("hello".toMore)
  println(2.square)
  println(3.cube)

  val im = new ImplicitTest3
  println(im.getImName)
}

 

scala中隐式转换之隐式类

标签:nbsp   定义   root   范围   就会   incr   extends   st3   hello   

原文地址:http://www.cnblogs.com/xubiao/p/8000376.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!