第10课:Scala继承彻底实战和Spark源码鉴赏

来源:互联网 发布:面包板是做单片机的吗 编辑:程序博客网 时间:2024/06/09 23:47
本节课详细讲解视频地址:
大数据Spark"蘑菇云"行动Scala继承详解搜狐视频地址:http://my.tv.sohu.com/us/48296654/84698083.shtml

1、父类一般都是抽象类,但是也有些情况不是,这样的话继承的子类不需要修改任何代码就可以运行;

2、isInstanceOf、asInstanceOf解析

isInstanceOf[T]

判断对象是否为T类型的实例。

isInstanceOf和asInstanceOf 由scala.Any类定义,Scala类层级的根类;其中class scala.AnyRef 继承自Any,是所有应引用类型的基类;trait scala.AnyVal 也继承自Any,是所有基本类型的实现的trait。

所以所有对象都自动拥有isInstanceOf和asInstanceOf这两个方法。

特别注意的是 Any 和AnyRef 这两个类属于“编译时类型”(虚拟类型?),不存在于运行时。所以这两者在Scala中都未提供源码,其语义由编译器在编译时构建。


再看一下例子:

  scala> 1.isInstanceOf[String]  res0: false  scala> List(1).isInstanceOf[List[String]]  res0: true
由于Scala像Java一样泛型存在类型擦除的原因,List(1).isInstanceOf[List[String]]及相当于List(1).isInstanceOf[List[_]], List(1) 是List的实例.

asInstanceOf[T]
将对象类型强制转换为T类型,子类转换成父类

结论

总而言之,我们把classOf[T]看成Java里的T.class, obj.isInstanceOf[T]看成 obj instanceof T, obj.asInstanceOf[T]看成(T)obj就对了。scala为我们提供了语法糖,但也免不了类型擦除问题的影响。

备注:

资料来源于:DT_大数据梦工厂(Spark"蘑菇云"行动

更多私密内容,请关注微信公众号:DT_Spark

如果您对大数据Spark感兴趣,可以免费听由王家林老师每天晚上2000开设的Spark永久免费公开课,地址YY房间号:68917580


1 0