Scala语法中的协变与逆变

论坛 期权论坛 脚本     
匿名技术用户   2021-1-4 04:52   650   0

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]("正在逆变")





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

正在协变
正在逆变





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP