Scala类型层次结构、类型转换

转载   2018-05-03   浏览量:218


在 Scala 中,所以的值都有类型,包括数值和函数。下图说明了类型层次结构的子集。
这里写图片描述
Scala类型层次结构

Any 是所有类型的父类型,也叫顶层类型。它里面定义了几个确定的方法,例如equals,hashcode和toString。Any 有两个直接的子类 AnyVal 和 AnyRef。
AnyVal 代表值类型,有9种预定义的值类型并且它们都不能为空:Double,Float,Long,Int,Short,Byte,Unit,Char和Boolean。Unit是不带有意义信息的值类型。确切的说,Unit 实例可以像这样被声明 :()。因为所有的函数都必须返回一些东西,所以有时 Unit 会是很有用的返回类型。
AnyRef 代表引用类型。全部的非值类型都被定义为引用类型。在Scala中用户定义的每个类型都是 AnyRef 的子类型。如果 Scala 运行在Java运行环境中,AnyRef 相当于 java.lang.Object。
下面的例子演示了字符串,整数,字符,布尔值和函数,他们和其他对象一样都是对象。

val list: List[Any] = List(
  "a string",
  732,  // 整数
  'c',  // 字符
  true, // 布尔值
  () => "一个返回字符串的匿名函数"
)
list.foreach(element => println(element))

这里写图片描述
上面代码中定义了一个 List[Any] 类型的list变量,list 被不同类型的元素初始化,但这些元素都是Scala.Any的实例。所以可以将它们添加进 list 中。
可以从上图中看到输出结果中包含了不同的元素类型。

类型转换

值类型可以按照下图箭头指示的方式进行转换。如Char可以转为Int。
这里写图片描述
例如:

val x: Long = 987654321
val y: Float = x  // 9.8765434E8 (注意在这个例子中强制转换会导致y丢失精度)
val face: Char = '?'
val number: Int = face  // 9786

这里写图片描述
强制转换是单向的,以下的例子不会通过编译

val x: Long = 987654321
val y: Float = x  // 9.8765434E8
val z: Long = y  // 不符合规则

这里写图片描述
接下来的章节将介绍如何将引用类型转换为子类型。

Nothing 和 Null

Nothing 是所有类型的子类型,也叫做底部类型。没有 Nothing 类型的值。一个常见的用法是用于发出非终止信号,例如抛出异常、程序退出或者一个死循环(无法计算出值的表达式或是没有正常返回的方法)。
Null 是所有引用类型的子类型(也就是说是AnyRef 的任何子类型)。它是由关键字 null 定义的单个值。null 主要是为了和其它JVM语言的交互而提供的,并且应该永远不要在Scala代码中使用它,我们将在后面探索 null 的替代方法。

转载自:https://www.2cto.com/net/201805/742511.html


上一篇:

用scala实现二次排序
用scala实现二次排序,二次排序就是按照不同字段进行排序,类似于MapReduce里面的分组+排序的实现。
实现scala二次排序代码
二次排序就是按照不同字段进行排序代码。
Scala面向对象编程教程
如果只是希望拥有简单的getter和setter方法,那么就按照scala提供的语法规则,根据需求为field选择合适的修饰符就好:var、val、private、private[this],但是如果希望能够自己对getter与setter进行控制,则可以自定义getter与setter方法。
Scala闭包分析
由于apply方法只是简单调用apply$mcII$sp(int)方法,因此我们继续分析apply$mcII$sp(int)。首先它调用了ClosureDemo类的ClosureDemo$$i$1方法取i的值,然后取Int类型的j$1的值,再取IntRef类型的k$1中的elem值,将它们加在一起返回。
Scala写WordCount查看本地的前20条数据
Scala写WordCount,查看本地的前20条数据,并统计出现的次数,并且是多线程。代码。
scala教程之每日一练
创建一个Listvallst0=List(1,7,9,8,0,3,5,4,6,2)将lst0中每个元素乘以10后生成一个新的集合解析:lst0map(_*10)将lst0中的偶数取出来生成一个新的集合解析:lst0filter(_%2==0)将lst0排序后生成一个新的集合解析:lst0sorted
新手入门必看的Scala的基本使用
1函数式编程2变量类型val常量var变量lazyval惰性求值3数据类型AnyVal基本数据类型:NumerictypeBooleanCharUnit(void)
Scala练习九文件和正则表达式
Scala练习九文件和正则表达式。摘要:在本篇中,你将学习如何执行常用的文件处理任务,比如从文件中读取所有行或单词,或者读取包含数字的文件等。
Scala练习四映射和元组
Scala练习四映射和元组。摘要:一个经典的程序员名言是:"如果只能有一种数据结构,那就用哈希表吧"。哈希表或者更笼统地说映射,是最灵活多变的数据结构之一。映射是键/值对偶的集合。Scala有一个通用的叫法:元组,即n个对象的聚集,并不一定要相同类型的。
Scala练习四
Scala练习四。1设置一个映射,其中包含你想要的一些装备,以及它们的价格。然后构建另一个映射,采用同一组键,但在价格上打9折。