Scala Implicit Conversions (隐式转换)

Implicit Conversions (隐式转换)

隐式转换在构建类库时是一个强大的工具。
使用隐式转换特性需要在编译时添加-language:implicitConversions选项。

定义隐式转换

Scala是强类型语言,不同类型之间的变量默认不会自动进行转换。
若需要提供类型之间的自动转换功能,需要显式使用implicit关键字自定义隐式转换。
隐式转换可以定义在当前类中或是伴生对象中,只要需要进行转换时能被访问到即可。

当传入参数的类型与函数需要的类型不同时,编译器便会查找是否有合适的隐式转换,如下所示:

class Implicit(val num: Int)

object Implicit {
   
  implicit def implToInt(impl: Implicit) = impl.num
  def apply(num: Int) = new Implicit(num)
}

object Main extends App {
   

  implicit def implToStr(impl: Implicit) = impl.num.toString

  def showNum(num: Int) = println(num)
  def showStr(str: String) = println(str)

  showNum(Implicit(100))
  showStr(Implicit(200))
}

当访问一个实例不存在的成员时,编译器也会查找是否存在隐式转换,能将其转化为拥有此成员的类型,如下所示:

class Implicit(val num: Int) {
   
  def show = println(num)
}

object Implicit {
   
  implicit def intToImpl(num: Int) = new Implicit(num)
}

object Main extends App {
   <
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值