大数据系列修炼-Scala课程78

来源:互联网 发布:万网域名后台登陆 编辑:程序博客网 时间:2024/05/18 03:57

大数据系列修炼-Scala课程78


核心内容:
1、Type(类型)与Class操作代码实战


1、Type(类型)与Class操作代码实战

1>在Scala当中可以用以下两种方式定义类型:
①定义类、特质或对象
②直接用type关键字定义类型
在Scala当中,标注类型的时候可以直接用类和特质的名字来引用其类型,而要引用对象的类型,需要用对象的type成员来引用其类型,而不能直接用object的名字来引用其类型,主要是为了区别伴生对象和伴生类。
2>在Scala当中,任何类对象都有一个type属性, this.type是Scala提供的一种机制,其指向当前对象的类型。
3>Class其实是一种数据结构以及基于该数据结构的一种抽象,相对来说更加宏观,而Type相比于
Class来说则更加详尽。简单来说就是:type是详细级别的信息,而Class是更高层的信息。
4>在Java当中或在Scala当中,在引入泛型之前,具体对象的类型(即Type)和class是一一对应的,即一一映射的,但是在引入泛型之后,具体对象的类型(即Type)和class就不在一一映射了。
5>对于两个对象而言,若其类型(type)相同,则两个对象所属的类肯定相同,但是若两个对象的类相同,其类型不一定相同。
6>对于虚拟机JVM而言,并不关心泛型或类型系统,泛型在编译与运行的时候是被擦掉的,在运行的时候泛型的具体信息是通过
反射的方式获取到的。


实例程序1:
这里写图片描述
实例程序2:
这里写图片描述
运行结果:

StringStringstr1.typestr2.typeclass java.lang.Stringclass java.lang.String

从上面的程序可以看出,无论是str1对象还是str2对象,其类型(type)和其类(class)是一一对应的。
实例程序3:
这里写图片描述
运行结果:

List[String]List[Int]list1.typelist2.typeclass scala.collection.immutable.$colon$colonclass scala.collection.immutable.$colon$colon

从上面的程序可以看出,引入泛型之后,具体对象的类型和其类不存在一一映射的关系。
实例程序4:
这里写图片描述
运行结果:

outer1.Innerouter2.Innerinner1.typeinner2.typeclass com.app.scala.review.Outer$Innerclass com.app.scala.review.Outer$Inner

从上面的程序可以看出两个对象的类型相同,其类必然相同。
如有问题,欢迎留言!

0 0