scala学习笔记(十六) 类型参数与隐式转换

本文解析Scala中的类型参数概念,包括上界、下界、视图界定、上下文界定及协变,并介绍了Scala中如何自定义隐式转换及其使用规则。

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

Scala中的类型参数晦涩难懂,不过有几个基本要点可以记录

 

T <:UpperBound  上界,通俗理解TUpperBound的子类

T >: LowerBound 下界,通俗理解为TLowerBound的超类

T <% Comparable[T] 视图界定,简单理解为,T可以通过隐式转换为后者

T : Ordering 上下文界定,必须存在一个类型为Ordering[T]的隐式值,这里还没有过多使用,不明其使用场景

 

型变

+T 协变,Student extends Person ,那么接收Pair[Person]的地方并不能接收Pair[Student],这里就需要将Pair定义为协变的,才能接收

 

-T 逆变 这东西目前还不懂



Scala可以允许程序员自己定义隐式转换,比如:

Implicit def int2Fraction(n : Int) =Fraction(n,1)

定义了上面的转换之后,当程序遇到下面的代码:

valresult = 3* Fraction(4,5)

 

正常情况下上面代码是不能通过编译的,因为整数3是不能与一个对象相乘的,这里因为有上面的隐式转换的定义在,所以3会被转换为函数调用int2Fraction(3)

 

隐式转换在scala中使用比较多,编译器转换规则如下:

 

1、如果不进行任何隐式转换就可以编译通过的情况下,编译器不会做任何转换,如果确实需要需要自己显示转换

2、如果可以同时执行多个转换的情况下,即有二义性,编译器会报错拒绝转换

3、编译器不会进行深层栈转换(需要通过多次转换)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ALAN-YOUNG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值