scala中的上界、下界、协变和逆变

class Pet(val name:String){
override def toString()=name
}
class Dog(override val name:String) extends Pet(name)
def workwithPets(pets:Array[Pet]){}


val dogs=Array(new Dog("Rover"),new Dog("Comet"))
workwithPets(dogs)//编译出错


//改写workwith方法
def workwithPets[T <: Pet](pets:Array[T])//T <: Pet表示T所代表的类派生自Pet,通过这种上界的语法表明具有参数类型T的
                                         //参数数组必须至少是Pet的数组,也可以是任何派生类的数组
workwithPets(dogs)//正确


将子类实例的容器赋给基类容器的能力成为协变,将父类实例的容器赋给子类容器的能力称为逆变,scala默认对二者都不支持
class MyList[+T]//...协变,-T称为逆变


var list1=new MyList[int]
var list2:MyList[Any]=null
list2=list1 //OK
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值