理论教育 Scala语言基础:视图界定中的隐式转换

Scala语言基础:视图界定中的隐式转换

时间:2023-11-24 理论教育 版权反馈
【摘要】:视图界定在泛型的基础上,对泛型的范围进行进一步限定,相比于类型变量界定建立在类继承层次结构的基础上,视图界定可以跨越类继承层次结构,其作用原理便是隐式转换。视图界定中的隐式转换示例。也就是说Int转换成RichInt后,由于RichInt属于Comparable的子类,因此满足视图界定的要求。

Scala语言基础:视图界定中的隐式转换

视图界定(View Bound)在泛型的基础上,对泛型的范围进行进一步限定,相比于类型变量界定建立在类继承层次结构的基础上,视图界定可以跨越类继承层次结构,其作用原理便是隐式转换。

【例8-8】视图界定中的隐式转换示例。

978-7-111-54169-1-Chapter08-34.jpg

运行结果如下。

978-7-111-54169-1-Chapter08-35.jpg(www.daowen.com)

可以看到,即使age为Int类型也是合法的。例8-8第9行代码之所以能够编译通过,原因在于第3行Student类的类型参数S通过视图界定进行了限定,这意味着类型参数S不仅可以是Comparable类层次结构上的类,也可以是能够经过隐式转换后的类,只要该类实现了Comparable接口,第9行代码的参数是Int类型,它会自动转换成RichInt类对象,而RichInt类混入了Comparable接口。查看RichInt Scala API文档可以看到如图8-1所示的RichInt类继承层次结构,RichInt类并没有直接混入Comparable接口,而是通过ScalaNum⁃berProxy类将Comparable中的方法继承过来,ScalaNumberProxy类继承层次结构如图8-4所示,ScalaNumberProxy混入了OrderedProxy,而OrderedProxy混入了特质Ordered,trait Or⁃dered混入了Comparable接口。也就是说Int转换成RichInt后,由于RichInt属于Comparable的子类,因此满足视图界定的要求。

978-7-111-54169-1-Chapter08-36.jpg

图8-4 ScalaNumberProxy类继承层次结构

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈