第5讲:隐式转换和并发编程

本文深入探讨Scala中的隐式转换,包括隐式参数、对象、类的用法及其在类型转换和接口扩展中的作用。此外,文章还介绍了并发编程的基础,如Actor模型,以及如何在Scala中实现并发消息通信。
摘要由CSDN通过智能技术生成

*一.隐式转换*
使用方式:
1.将方法或变量标记为implicit
2.将方法的参数列表标记为implicit
3.将类标记为implicit
限制:
1.implicit关键字只能用来修饰方法、变量(参数)和伴随对象。
2.隐式转换的方法(变量和伴随对象)在当前范围内才有效。如果隐式转换不在当前范围内定义(比如定义在另一个类中或包含在某个对象中),那么必须通过import语句将其导入。
3.源类型或目标类型(包括源类型和目标类型的类型变量的类型)的伴随对象中隐式转换函数(或变量,伴随对象)不需要显示导入。

1.1 隐式参数函数
不是手动调用,是Scala使用时自动被调用的,将值从一种类型转换成另一种类型。

scala> class Person(val name:String)
defined class Person
scala> class Engineer(val name: String, val salary: Double)
defined class Engineer
scala> new Person("Spark").code
<console>:12: error: value code is not a member of Person
       new Person("Spark").code
//Person 没有code方法,无法调用
scala> class Engineer(val name: String, val salary: Double){
   
     | def code = println("Coding ....")
     | }
defined class Engineer
scala> def toCode(p: Person){
     | p.code
     | }
<console>:12: error: value code is not a member of Person
       p.code
//报错,Person为code方法
scala> implicit def person2Engineer(p : Person): Engineer ={
     | new Engineer(p.name , 10000)
     | }
person2Engineer: (p: Person)Engineer
//定义隐式转换函数,再写toCode方法
scala> def toCode(p: Person){
     | p.code
     | }
toCode: (p: Person)Unit
//此时不会报错
scala> toCode(new Person("Scala"))
//new person 返回的是Engineer。
Coding ....
//自动使用隐式转换函数,在找code方法时,无此方法,将Person对象隐式转换成Engineer对象,然后就可以调用code方法。此过程是在运行时调用的,自动的进行。

toCode要调用person实例的code方法,而person本身没有code方法
要想代码工作,必须在程序可见范围内隐式转换函数,此时Scala会自动使用隐式转换函数,将传进来的person实例对象通过person2Engineer这个隐式转换函数(可能存在多个隐式转换函数,主要是通过输入类型来判断)进行类型匹配,获得了Engineer对象。此时new Person 返回的是Engineer,然后调用它的方法code。使用完这个功能后,这个功能也消失了。
person和Engineer是并没有关系的。
优点:隐式功能不对外开放,既可以随意增加它或删除它;可以很好地扩展接口。
实例:

import scala.io.Source
import java.io.File
class RicherFile(va
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值