博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
scala学习手记18 - Any和Nothing
阅读量:6607 次
发布时间:2019-06-24

本文共 1026 字,大约阅读时间需要 3 分钟。

Any

前面已经有两次提到过:在scala中,Any类是所有类的超类。

Any有两个子类:AnyVal和AnyRef。对应Java直接类型的scala封装类,如Int、Double等,AnyVal是它们的基类;对应引用类型,AnyRef是它们的基类。

scala中,所有类的关系可以用下面这张图大致描述下:

Any是一个抽象类,它有如下方法:!=()、==()、asInstanceOf()、equals()、hashCode()、isInstanceOf()和toString()。AnyVal没有更多的方法了。AnyRef则包含了Java的Object类的一些方法,比如notify()、wait()和finalize()。

AnyRef是可以直接当做java的Object来用的。对于Any和AnyVal,只有在编译的时候,scala才会将它们视为Object。换句话说,在编译阶段Any和AnyVal会被类型擦除为Object。

Nothing

一直以来,都是将scala中的概念和Java对比着来学的。确实,很多内容也都能对的上。但是Nothing这个概念却不好说了。它有点儿像java中的null——在没有明确指出的情况下,它们可以是任何类的值。但是在语义上二者有着本质的区别:Nothing是所有对象的子类,是一个类;null是所有对象的默认值,是一个特殊的独立的概念(null不是对象),是一个特殊的唯一的值。

Nothing到底是什么呢?或者换个方向考虑:Nothing的用处是什么呢?

再看一下上面的那张图,可以看到:所有类的基类都是Any,所有类的最终子类都是Nothing。换个角度来考虑:任何一个实例的类型都可以视为Any;一个Nothing的实例可以看做是任何类的实例。可是再想想,Nothing有实例么,可以将什么样的值赋给一个Nothing的实例呢。想不到可以将怎样的值赋给一个Nothing实例。Nothing看起来象是一个无用的定义。

想了好久也弄不明白Nothing的用处。姑且先记住教材上的说法吧:Nothing是一个抽象的概念,它的作用是帮助类型更平滑地进行。

-----

忽的有了一个有趣的想法:Nothing就是个鬼,当遇到无法解释或不好解释的内容,就可以堂而皇之的说“鬼晓得”。

###########

转载于:https://www.cnblogs.com/amunote/p/5612341.html

你可能感兴趣的文章
33.8. slb configuration
查看>>
ext的window如何隐藏水平滚动条
查看>>
71.8. Run level shell script to start Oracle 10g services on RedHat Enterprise Linux (RHAS 4)
查看>>
SAP QM Transfer of Inspection Stock
查看>>
全新视觉| 数治省市:SAP大数据构想一切可能
查看>>
ORACLE expdp备份与ORA-31693、ORA-02354、ORA-02149
查看>>
SAP S/4 HANA新变化-信用管理
查看>>
doc-remote-debugging.html
查看>>
DBMS_STATS.GATHER_TABLE_STATS
查看>>
Java-单机版的书店管理系统(练习设计模块和思想_系列 五 )
查看>>
嵌入式 详解udev
查看>>
《C程序员:从校园到职场》出版预告(2):从“百花齐放”到“一枝独秀”
查看>>
Network Monitor 查询命令和MySQL命令
查看>>
好“戏”刚刚开幕 云计算逐步被认可
查看>>
云安全:这也是需要花大钱去建设的部分
查看>>
以全局产业观领航智慧城市建设
查看>>
5G网络不止能1秒下一部电影,它还能够…
查看>>
中国电信集采终端6700万部 金额达1070亿元
查看>>
2016年的十个数据中心故事
查看>>
《Java并发编程的艺术》一一3.3 顺序一致性
查看>>