Scala类型系统中Nil, Null, None, Nothing四个类型的区别?

https://upload-images.jianshu.io/upload_images/1611719-320e9da035bb597d.png?imageMogr2/auto-orient/strip|imageView2/2/w/1000/format/webp

  1. Null是一个trait(特质),是所以引用类型AnyRef的一个子类型,<mark style="box-sizing: border-box;">null是Null唯一的实例</mark>。(list、option、yourclass等)
  2. Nothing也是一个trait(特质),是所有类型Any(包括值类型和引用类型)的子类型,<mark style="box-sizing: border-box;">它不在有子类型</mark>,它也没有实例,实际上为了一个方法抛出异常,通常会设置一个默认返回类型。基本类型、Unit等
//所以:
 val cc:String=null//可(因为string是list类型)
val cc_int:Int=null//不可,Null是AnyRef的一个子类型,而基本类型是AnyVal的自类型

Nothing这个类一般用于指示程序返回非正常结果,利用Nothing作为返回值可以增加程序的灵活性。例如:

def error(msg:String):Nothing={
    throw new RuntimeException(msg)
  }

def divide(x: Int, y: Int): Int =
if (y != 0) x / y
else error("can't divide by zero")

  1. Nil代表一个List空类型,等同List[Nothing]
  2. None是Option monad的空标识
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容