第15课:Scala类型参数编程实战及Spark源码鉴赏

本节课主要讲:

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感兴趣,可以免费听由王家林老师每天晚上2000开设的Spark永久免费公开课,地址YY房间号:68917580

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值