Scala的null/空对象

引言

在Java中,我们通常用一个null来表示引用的缺失。但是,这样的做法会在代码里产生大量的判空逻辑:

//常用的判空逻辑
if(null == someObejct){
    ...    ...
}else {
    ...    ...
}

这种null值的使用,会导致项目里散落着大量如上的代码,加大了代码量的同时,一旦我们忘记了对null的处理,就会导致整个程序的崩溃。所以,null值一直是Java程序员不得不面对的琐事,而常见的解决方案,如单例对象可以在内部进行null值的处理,但其使用的场景并不普遍。

Java中对空值的处理

Java中,我们可以通过编程的方式在对象类别处理空值,从而减少程序在使用对象时所需要的null判断,但是这样对整个程序的设计提出了更高的要求。同时,若普遍采用内部处理null的方式,就意味着程序中的bug会一直传递,当因为某个bug导致生成了一个null值时,我们会很长时间才会察觉到bug的存在,这让我们对bug来源的追踪变得更困难。所以,是否显示使用null对象,是一个值得斟酌的问题。有如下两个场景可以值得参考:

  1. 假设我们的系统需要用ID查询数据并生成对象,且这个ID是由我们的系统给出,那么,我们可以使用null对象。因为,一旦bug发生,我们可以马上检查到系统的错误,可以阻断问题的传播。
  2. 假设我们的系统需要用ID查询数据并生成对象,且这个ID是由外部系统给出,那么,我们将采用空对象的方式。因为,一旦ID出现错误,并不是我们系统的错误,系统就传递一个默认的空对象交由下一个系统处理,这样我们就保证了自身系统的鲁棒性。

Scala的空值处理

Scala兼具面向对象编程与函数编程一体,所以它也提供了null值;然而,Scala中并不会经常使用他们,而是使用Scala的类型系统来替代null。常见的处理方式就是Option类,它以一种安全的方式存放返回的对象。

  • Option类型是一个容器,与Map和Vector非常相似,差别是它一次只能容纳一个元素。
  • Option拥有两个重要的子类型:Some和None。(前者存放了一个值,而后者则是一个单例对象,它没有任何值)

Option可以灵活提供空对象与null两种场景,getOrElse(“default value”)方法在其值为None时可以返回一个默认值;若Option值为空则返回None对象,类似于null值的功能。

Scala提供的Option方式也可以称为静态类型系统的方式,因为它的每一个返回值都有确切的类型,这样,编译器将帮助我们确保在编译期合理地处理空值。

总结

Scala的Option类型可以迫使我们在可能无法获得值得情况下明确地对值得缺失进行处理,这样将使得大量得场景下都写出安全的代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值