• scala学习手记18


    Any

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

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

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

    3RTDt3VOau69lT

    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就是个鬼,当遇到无法解释或不好解释的内容,就可以堂而皇之的说“鬼晓得”。

    ###########

  • 相关阅读:
    路由重分发 最重要 最难 ccnp
    (01)Zookeeper简介
    (01)kafka以及消息系统的基本介绍
    (05)使用kafka脚本发送消息和接收消息
    (04)kafka多机多Broker(集群)的基本配置
    (03)kafka单机多Broker(伪分布式)的基本配置
    (02)安装配置kafka单Broker及其基本操作
    (02)安装zookeeper集群
    (09)使用xshell工具查看redis客户端,汉字显示乱码解决方法
    (08)redis之使用java客户端、spring连接redis、redis集群示例
  • 原文地址:https://www.cnblogs.com/amunote/p/5612341.html
Copyright © 2020-2023  润新知