您的位置:首页 > 其它

scala中隐式转换之隐式类

2017-12-07 18:04 267 查看
/**
* 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)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: