隐式转换

本文探讨了Scala中的隐式转换,指出其用于简化代码并解决类型转换问题。通过示例,解释了如何使用隐式转换在自定义数字类中实现加法,并介绍了隐式类、隐式参数的用法。同时,列举了隐式转换的四条关键规则,强调正确使用的重要性,以避免编译错误和复杂度提升。最后,通过比较隐式参数与`implicitly`的用法,阐述了`implicitly`如何帮助获取类型相关的隐式转换。
摘要由CSDN通过智能技术生成

        隐式转换在scala中具有强大的魔力,能够让本就精简的代码变得更加简洁。但是强大同样意味这难以掌握,刚好我在学习scala的过程中接触到了这种神奇的语言特性,于是不自量力的说说自己的理解。

        无论任何语言特性,复杂的或者简单的,它出现的目的必定是为了解决某些其他语言难以解决或者解决起来十分麻烦的问题。所以为了了解隐式转换,同样我们需要知道它可以解决哪些问题。从一个简单的例子出发。比如我们现在有一个自定义的数字类。然后我们在其中定义了加法。代码类似下图:


可以看到自定义的数字类中有两个重载的方法用来计算加法。看起来似乎是没有问题,但是如果上图中val c = a + b  变成 val c = b + a就会编译失败。因为在Int类中并不存在重载后参数为自定义数字类的加法。所以这个时候我们就需要将a转换类型为自定义数字类这样就能用自定义数字类中的方法来完成计算。当然如果手动来完成这样的操作,看起来实在太繁琐,不符合简洁的风格。同时也会将自己的实现暴露给调用者。于是此时我们就可以用隐式转换来完成这个操作。


如图中所示,不仅可以将Int类型隐式转换为Demo3类型,同时也可以将Double类型,自定义的Demo4类型隐式转换成Demo3类型然后完成计算。

        当然除了隐式方法以外,还有隐式类和隐式参数。比如下面这段代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值