Scala语法中的协变与逆变

Scala语法中的协变与逆变


Scala的协变和逆变是,解决了Java中的泛型的不灵活性!
在Java中,如果有String是Object的子类,那么List<String>是不是List<Object>的子类?
答案是:否定的。因此对于开发程序造成了很多的麻烦。

java.util.List<String> list1 = new LinkedList<>();
java.util.List<Object> list2 = new LinkedList<>();

list2 = list1;

上述代码编译是不通过的


Scala只要灵活使用协变和逆变,就可以解决Java泛型的问题。

协变是可以让泛型中的子类可以继承父类。

逆变是可以让泛型中的父类逆向继承子类。

//协变
class List[+T](val str: String){
println(str) //相当于调用了构造函数
}

//逆变
class List2[-T](val str: String){
println(str) //相当于调用了构造函数
}

val list: List[Any] = new List[String]("正在协变")

val list2: List2[String] = new List2[Any]("正在逆变")





上述代码编译通过,并输出

正在协变
正在逆变





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值