Scala 隐式转换
2018-03-12 15:46
232 查看
简单说,隐式转换就是:当Scala编译器进行类型匹配时,如果找不到合适的候选,那么隐式转化提供了另外一种途径来告诉编译器如何将当前的类型转换成预期类型。
“隐式类”
他们只能在构造函数中取一个非隐式参数。
范围内可能没有任何方法、成员或对象具有与隐式类同名的名称或对象。注意:这意味着隐式类不能是case类。
隐式类与旧的隐式转换的语法(implicit def)是有细微的不同的,隐式类的运作方式是:隐式类的主构造函数只能有一个参数(有两个以上并不会报错,但是这个隐式类永远不会被编译器作为隐式类在隐式转化中使用),且这个参数的类型就是将要被转换的目标类型。
类的增强和扩展
模拟新的语法类类型
隐方式转换语法
“implict def”形式(Scala 2.10版本之前的写法)object All_implicit { // “implict def”形式的隐式转换 object Convert{ implicit def string2Int(str:String): Int ={ Integer.parseInt(str) } } def main(args: Array[String]): Unit = { import Convert._ val max = Math.max("193",45) println(max) } }
“隐式类”
object All_implicit { implicit class Convert(val str: String){ def strToInt:Int = { str.toInt } def add:String = { str+"***" } } import com.test.Test_Implict.All_implicit.Convert def main(args: Array[String]): Unit = { val max = Math.max("193".strToInt,45) val res = "hello".add println(max) println(res) } }隐式类的限制它们必须在另一个特性/类/对象中定义。
他们只能在构造函数中取一个非隐式参数。
范围内可能没有任何方法、成员或对象具有与隐式类同名的名称或对象。注意:这意味着隐式类不能是case类。
隐式类与旧的隐式转换的语法(implicit def)是有细微的不同的,隐式类的运作方式是:隐式类的主构造函数只能有一个参数(有两个以上并不会报错,但是这个隐式类永远不会被编译器作为隐式类在隐式转化中使用),且这个参数的类型就是将要被转换的目标类型。
隐式转换的使用场景
类型转换类的增强和扩展
模拟新的语法类类型
隐式参数
隐式参数与我们前面讲述的隐式类型转化有很大的差异,虽然它涉及到了关键字implict,但是它做的是另外一件事情。隐含参数有点类似缺省参数,如果在调用方法时没有提供某个参数,编译器会在当前作用域查找是否有符合条件的 implicit 对象可以作为参数传入,不同于缺省参数,隐式参数的值可以在方法调用的前的上下文中指定object Param_Implicit { implicit val temp = 66 object Greeter{ def greet(age1:Int)(implicit age2:Int):String={ s"the bigger is ${Math.max(age1,age2)}" } } def main(args: Array[String]): Unit = { val res = Greeter.greet(12)(32) val res2 = Greeter.greet(12) println(res) println(res2) } }参考:http://blog.csdn.net/bluishglc/article/details/50866314#reply
相关文章推荐
- Scala入门到精通——第十八节 隐式转换与隐式参数(一)
- 第五课 Scala隐式转换和并发编程及Spark源码阅读
- Scala的main方法、包、for循环、操作符重载、 系统定义、implicit隐式转换及泛型
- Scala学习笔记6 - 隐式转换和隐式参数
- 深入理解Scala的隐式转换系统
- Scala中隐式参数与隐式转换的联合使用实战详解及其在Spark中的应用源码解析之Scala学习笔记-51
- Scala - 隐式转换和隐式参数
- Scala的函数,高阶函数,隐式转换
- scala implicit 隐式转换
- 大数据Spark “蘑菇云”行动前传Scala专家之路第28课:Scala隐式转换内幕实践解密
- Scala进阶源码实战之八——隐式转换和隐式参数
- 第63讲Scala中隐式参数与隐式转换的联合使用解析
- Scala之隐式转换implicit详解
- Scala中隐式转换初体验实战及spark中应用
- scala隐式转换implicit
- Scala中的隐式转换
- 简述scala隐式转换
- scala隐式转换
- scala implicit 隐式转换
- 深入理解Scala的隐式转换系统