scala隐式转换函数
来源:互联网 发布:极客学院java百度网盘 编辑:程序博客网 时间:2024/06/03 13:32
定义:
1.只要在程序可见的范围内定义了隐式转换函数,就会被scala自动调用
2.隐式转换函数的名字可以任意,建议名为”xxx2yyy”
3.以implicit开头,而且最好定义函数返回类型
eg:
object Test{ def main(args:Array[String]): Unit ={ class Student(val name: String) class Older(val name: String) class SpecialPerson(val name: String) implicit def object2SpecialPerson (obj: Object): SpecialPerson = { if (obj.getClass == classOf[Student]) { val stu = obj.asInstanceOf[Student]; new SpecialPerson(stu.name) } else if (obj.getClass == classOf[Older]) { val older = obj.asInstanceOf[Older] new SpecialPerson(older.name) } else null } var ticketNumber = 0 def buySpecialTicket(p: SpecialPerson) = { ticketNumber += 1 "T-" + ticketNumber } val a=new Student("aaa") println(buySpecialTicket(a)) val b=new Older("bbb") println(buySpecialTicket(b)) }}
** 隐式转换的强大之处就是可以在不知不觉中增强现有类的功能
** 如果隐式转换函数不在可见范围内,那就必须使用import来导入,如:importxxx._
class Man(val name: String)class Superman(val name: String) { def emitLaser = println("emit a laster!")}implicit def man2superman(man: Man): Superman = new Superman(man.name)val leo = new Man("leo")leo.emitLaser
** Scala什么时候会进行隐式转换?
1 调用某个函数,但传入参数的类型与函数定义的参数类型不匹配(函数)
2 调用某个方法,虽然该类有这个方法,但给方法传入的参数类型,与方法定义的参数类型不匹配(方法)
3 使用某个对象,调用某个方法,但这个方法并不存在于该类时
—-隐式参数———————
** 在函数或方法中,用implicit来修饰的参数即为隐式参数
** Scala会尝试找到一个对应类型的、用implicit修饰的对象,即隐式值,并将其作为参数注入
** Scala会在两个范围内查找:一个是当前作用域内可见的val或var定义的隐式变量
** 另一个是隐式参数类型的伴生对象内的隐式值
class SignPen { def write(content: String) = println(content)}implicit val pen = new SignPendef signForExam(name: String) (implicit signPen: SignPen) { signPen.write(name + " come to exam in time.")}signForExam("aaa")
阅读全文
1 0
- scala隐式转换函数
- Scala隐式转换之隐式转换函数
- scala-隐式转换
- scala 隐式转换
- Scala隐式转换
- Scala隐式转换
- scala隐式转换
- scala隐式转换
- scala 隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- scala隐式转换
- Scala--隐式转换
- Scala-隐式转换-私有函数-重载-构造器
- Scala高阶函数与隐式转换
- Scala 之隐式转换函数(十)
- scala implicit 隐式转换
- HDU 1690 Bus System(Floyd)
- 浅谈对handle的理解
- ZigBee CC2530 Z-Stack 19 单播通信2-64位地址模式
- CDN是什么?使用CDN有什么优势?
- URL、SRC、href之间的区别
- scala隐式转换函数
- Docker安装Nginx环境
- 进程间通信的方式
- 初步认识JVM
- JAVA操作Hbase管理类HbaseManage基本详细操作
- java每日一练
- echarts仪表盘(ie8中0显示异常)
- Codeforces845C
- Android Service的bindService和startService混合使用及其关闭分析