Scala 统一类型

198 阅读1分钟

「这是我参与2022首次更文挑战的第3天,活动详情查看:2022首次更文挑战

在Scala中,所有的值都有类型,包括数值和函数。下图阐述了类型层次结构的一个子集。

数据类型关系图.png

Any

Any是所有类型的超类型,也称为顶级类型。它定义了一些通用的方法如equalshashCodetoStringAny有两个直接子类:AnyValAnyRef

object Learn0001 {
  def main(args: Array[String]): Unit = {
    val a: Any = 1
    val b: Any = 'w'
    val c: Any = 1.0
    val d: Any = null
    val e: Any = None
    println(s"$a,$b,$c,$d,$e")
  }
}
--------------------------------------------------
输出:(Any 可以接受所有类型的数据)

1,w,1.0,null,None

AnyVal

AnyVal 代表值类型。有 9 个预定义的非空的值类型分别是:Double、Float、Long、Int、Short、Byte、Char、Unit 和 Boolean。

Unit 是不带任何意义的值类型,它仅有一个实例可以像这样声明:()所有的函数必须有返回,所以说有时候 Unit 也是有用的返回类型。

val a: AnyVal = 1
val b: AnyVal = 's'
val c: AnyVal = 1.0

AnyRef

AnyRef 代表引用类型。

所有非值类型都被定义为引用类型。在 Scala 中,每个用户自定义的类型都是 AnyRef子类型

如果 Scala 被应用在 Java 的运行环境中,AnyRef 相当于 java.lang.Object

def main(args: Array[String]): Unit = {
    class Person {}
    def anyRefTypes(): Unit = {
      val person: AnyRef = new Person();
      println(s"person params memory  address is  $person")

    }
    anyRefTypes();
  }
______________________________________________________________
输出:
person params memory  address is  Learn0001$Person$1@3043fe0e

Null

Null 是所有引用类型的子类型(即 AnyRef 的任意子类型)。它有一个单例值由关键字 null 所定义。Null 主要是使得 Scala 满足和其他 JVM 语言的互操作性,但是几乎不应该在 Scala 代码中使用。

def main(args: Array[String]): Unit = {

    def NullTypes(): Unit = {
      val a: AnyRef = null
      val b: Null = null
      println(s"the a values is $a and the b value is $b ")
    }
    NullTypes();
  }

Nothing

Nothing所有类型的子类型,也称为底部类型。没有一个值是 Nothing 类型的。

它的用途之一是给出非正常终止的信号,如抛出异常、程序退出或者一个无限循环 (可以理解为它是一个不对值进行定义的表达式的类型,或者是一个不能正常返回的方法)。