Scala 08 隐式转换

本文介绍了Scala中的三种隐式转换:隐式转换函数允许为现有类添加新方法;隐式参数用于传递默认值或全局状态;隐式类则能够为基本类型添加方法,提高代码的可读性和功能性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 隐式转换

为一个已存在的类添加一个新的方法。

// 定义一个Man类,方法为eat
scala> class Man(val name: String) {
     |   def eat(): Unit = {
     |     println(s"man: $name eat......")
     |   }
     | }
defined class Man

// 定义一个Superman类,方法为fly
scala> class Superman(val name: String) {
     |   def fly(): Unit = {
     |     println(s"superman: $name fly......")
     |   }
     | }
defined class Superman

// 创建man对象
scala> val man = new Man("lisi")
man: Man = Man@7e990ed7

// man没有fly方法
scala> man.fly()
<console>:14: error: value fly is not a member of Man
       man.fly()
           ^

// 定义隐式转换函数
scala> implicit def man2superman(man: Man): Superman = new Superman(man.name)
warning: there was one feature warning; re-run with -feature for details
man2superman: (man: Man)Superman

// 现在man可以飞了
scala> man.fly()
superman: lisi fly......

2 隐式参数


// 定义一个函数,有隐式参数
scala> def testParm(implicit name:String): Unit ={
     |     println(name+".............")
     |   }
testParm: (implicit name: String)Unit

// 调用函数
scala> testParm("lisi")
lisi.............

// 定义一个隐式常量
scala>   implicit val name="zhangsan"
name: String = zhangsan

// 调用函数,会使用隐式常量
scala>   testParm
zhangsan.............

3 隐式类

scala> implicit class Calculator(x: Int) {
     |     def add(a: Int) = a + x
     |   }
defined class Calculator

// 1神奇得有了add方法
scala> 1.add(3)
res4: Int = 4
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值