本节课主要讲:
1、Scala的类和方法、函数都可以是泛型
2、上界:表示泛型的类型必须是某种类型或者其类型的子类,语法:<: ,对类型进行限定
3、下界:表示泛型的类型必须是某种类型或者其类型的父类,语法:>:
4、View Bounds,可以进行隐式转换,将其转换成目标类型,是上边界和下边界的加强版,
语法 T <% U,T必须是U的类型,但是又没有直接继承自U,所以要通过隐式转换操作
5、T:ClassTag,一种类型转换,编译的时候类型不够,需要通过JVM的runtime来通过运行时的获取信息
6、逆变和协变,语法:-T和+T,-T:子类能参加,父类也能参加(逆变), +T:父类能参加,子类也能参加:(协变)
这里主要通过代码解析下逆变和协变:
1、首先定义类Engineer、Expert、Senior,同时Expert继承Engineer,Senior继承Expert
class Engineer
class Expert extends Engineer
class Senior extends Expert
2、定义类Meeting,并指定为逆变的方式
class Meeting[-T] //逆变
3、在object中定义一个方法,参数中指定T类型为Expert
def JoinMeeting(meet: Meeting[Expert]) {
println("Welcome")
}
4、因Meeting类定义的泛型T为逆变的,并且方法JoinMeeting的参数中指定T为Expert,则在调用该方法时,可以传Expert或其父类Engineer,不能传其子类型
val meet = new Meeting[Engineer]
JoinMeeting(meet)
5、如果将Meeting类定义为协变
class Meeting[+T] //协变
6、则在调用JoinMeeting方法时,可以传Expert或其子类Senior,不能传其父类
val meet = new Meeting[Senior]
JoinMeeting(meet)
备注:
资料来源于:DT_大数据梦工厂(Spark"蘑菇云"行动)
更多私密内容,请关注微信公众号:DT_Spark
如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上20:00开设的Spark永久免费公开课,地址YY房间号:68917580