在图释11.1类型层级的底部你看到了两个类scala.Null和Scala.Nothing。它们是用统一的方式处理某些Scala的面向对象类型系统的“边界情况”的特殊类型。
编辑推荐:Scala编程语言专题
类Null是null类型的引用;它是每个引用类(就是说,每个继承自AnyRef的类)的子类。Null不兼容值类型。你不可,比方说,把null值赋给整数变量:
- scala>val i: Int = null
- < console>:4:error:typemismatch;
- found:Null(null)
- required:Int
类型Nothing在Scala的类层级的***端;它是任何其它类型的子类型。然而,根本没有这个类型的任何值。要一个没有值的类型有什么意思呢?7.4节中讨论过,Nothing的一个用处是它标明了不正常的终止。例如Scala的标准库中的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("can't divide by zero")
“那么”状态分支,x / y,类型为Int,而“否则”(else)分支,调用了error,类型为Nothing。因为Nothing是Int的子类型,整个状态语句的类型是Int,正如需要的那样。
【相关阅读】
分享标题:简单接触Scala底层类型
当前地址:http://www.mswzjz.cn/qtweb/news30/325980.html
攀枝花网站建设、攀枝花网站运维推广公司-贝锐智能,是专注品牌与效果的网络营销公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 贝锐智能