Guava学习(基本工具)——Optional

Guava的Optional对象是为了让编程人员时刻记住引用变量指向null的情况,此处还需参考java关键字null

Optional的使用契机

  • 轻率地使用null可能会导致很多令人惊愕的问题。通过学习Google底层代码库,我们发现95%的集合类不接受null值作为元素。我们认为, 相比默默地接受null,使用快速失败操作拒绝null值对开发者更有帮助(以上这句话是Guava官方教程的说明,解读:在程序开发中使用null需要谨慎
  • 关键字null具有两个不同的含义:引用变量不存在或者值是null

Guava之工具类Optional

  • 说明:Guava为了避免因为null导致的混乱,提供了工具类Optional来替代null,其本质也是为了迫使开发人员时刻记住对于关键字null的思考
  • Optional来替代null,其明确了null的含义,null在Optional中代表的是缺失,不表示是null值
  • 简单实用举例:
Optional<Integer> possible = Optional.of(5);
possible.isPresent(); // returns true
possible.get(); // returns 5

工具类Optional的方法

png one

Optional在项目中的应用举例

  • 通过一个查找的例子进行说明
//为了保证find方法成功返回,对people进行是否为空的判断
Person person = people.find("John Smith");
if (person != null) 
    person.doSomething();
  • 使用Optional
Optional person = people.find("John Smith");
if (person.isPresent())
    person.get().doSomething();
  • 使用Optional的好处:
    1. 在Java世界里,解决空引用问题常见的一种办法是,使用Null Object模式。这样的话,在“没有什么”的情况下,就返回Null Object,客户端代码就不用判断是否为空了。但是,这种做法也有一些问题。首先,我们肯定要为Null Object编写代码,而且,如果我们想大规模应用这个模式,我们要为几乎每个类编写Null
      Object
    2. 使用Optional对象的好处在于,你绝对不会忘记判空,因为这里我们得到的不是Person类的对象,而是Optional。
      以上两句话引用与此处

存在的疑惑

  • 说明中,Guava使用了快速失败操作拒绝null值,目前对该句话理解得并不清晰

快速失败个人理解

  • 所谓的快速失败,当出现null的时候,Optional会快速抛出异常,并终止之后代码的运行,以下举例说明
public class Demo
{ 
    //guava test
    public void guavaTest() throws NullPointerException
    {
        Optional<Integer> possible = Optional.of(null);
        if(possible.isPresent()){//Optional会在此处抛出空指针异常
            System.out.println("object not null");
        }
    }
    public static void main(String[] args)
    {
        System.out.println("say something");
        Demo demo = new Demo();
        try{
            demo.guavaTest();
        }
        catch(NullPointerException e){
            System.out.println("Exception has been handled");
        }
        System.out.println("say something");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值