×
Scala 教程Scala 简介Scala 安装及环境配置Scala 起步Scala 进一步Scala 基础语法Scala 数据类型Scala 变量Scala 访问修饰符Scala 运算符Scala IF...ELSE 语句Scala 循环Scala 函数Scala 闭包Scala 字符串Scala 数组Scala Collection(集合)Scala Match 表达式Scala Iterator(迭代器)没有“break”和“continue”Scala 类和对象Scala Trait(特征)Scala Trait 的基本概念选择瘦接口还是胖接口设计?Scala Trait 示例–RectangularScala Ordered TraitTrait 用来实现可叠加修改操作Scala 模式匹配Scala 正则表达式Scala 异常处理Scala 提取器(Extractor)Scala 文件 I/OScala 减低代码重复Scala 柯里化函数Scala 创建新的控制结构Scala 传名参数Scala 的类层次关系Scala 基本数据类型的实现方法Scala 底层类型

Scala 所有类的公共子类–底层类型


所有类的公共子类–底层类型

前面我们给出了 Scala 的类的一个关系图:

在这张图的最下方我们可以看到有两个类,scala.Null 和 scala.Nothing。 这两个类的作用是 Scala 支持统一方式用来处理面向对象的一些边角情况。因为它们在类层次图的下方,因此也称为底层类型。

类 Null 代表 null 引用,它是所有引用类(每个由 AnyRef 派生的类)的子类。Null 和值类型不兼容,也就是比如说,你不能把 null 赋值给一个整数类型变量:

scala> val i:Int=null
<console>:7: error: an expression of type Null is ineligible for implicit conversion
       val i:Int=null

Nothing 类型为图中类层次关系的最下方,它是所有其他类的子类,然而这个类型没有任何实例(也就是没有任何值对应 Nothing 类型)前面提到,Nothing 类型的一个用法是示意应用程序非正常终止,比如 Predef 的有一个 error 方法:

def error(message:String) :Nothing =
  throw new RuntimeException(message)

error 的返回类型就是 Nothing,告诉调用者该方法没有正常退出(抛出异常)。正因为 Nothing 为所有其它类型的子类,你可以灵活使用如 error 这样的函数。比如:

def divide(x:Int,y:Int):Int=
  if(y!=0) x/y
  else error("Cannot divide by Zero")

if “then”分支的类型为 Int(x/y),else 分支的类型为 error 返回值,其类型为 Nothing,因为 Nothing 为所有类型的子类,它也是 Int 的子类,因此 divide 的类型为 Int。


分类导航

关注微信下载离线手册

bootwiki移动版 bootwiki
(群号:472910771)