资讯专栏INFORMATION COLUMN

Java 8 Optional与NullPointerException

时飞 / 2733人阅读

摘要:异常类列举了中部分的异常类,其中最常见的当属了,程序员必须小心提防,所幸中引入了类这个语法糖来更好的处理这个异常。函数式接口可以被实现为,更进一步可以转换为表达式,如果只是调用了一个函数,还可以用。

JAVA异常类列举了Java中部分的异常类,其中最常见的当属NullPointerException了,程序员必须小心提防,所幸Java 8中引入了Optional类这个语法糖来更好的处理这个异常。
比如有如下三个类需要递归引用:

class FirstLayer {
    private SecondLayer secondLayer;
    public SecondLayer getSecondLayer(){
        return secondLayer;
    }
}
class SecondLayer {
    private ThirdLayer thirdLayer;
    public ThirdLayer getThirdLayer() {
        return thirdLayer;
    }
}
class ThirdLayer {
    private String foo;
    public String getFoo(){
        return foo;
    }
}

之前的做法是:

FirstLayer firstLayer = new FirstLayer();
if (firstLayer != null && firstLayer.getSecondLayer() != null && firstLayer.getSecondLayer().getThirdLayer() != null) {
    System.out.println(firstLayer.getSecondLayer().getThirdLayer().getFoo());
}

现在可以:

Optional.of(new FirstLayer()).map(FirstLayer::getSecondLayer).map(SecondLayer::getThirdLayer).map(ThirdLayer::getFoo).ifPresent(System.out::println);

在map函数内部会进行null校验,同时这里还使用了method reference,详细解释请参加:Java 8 Method Reference: How to Use it
甚至还可以:

public static  Optional resolve(Supplier resolver) {
    try {
        T result = resolver.get();
        return Optional.ofNullable(result);
    } catch (NullPointerException e){
        return Optional.empty();
    }
}
FirstLayer firstLayer = new FirstLayer();
resolve(() -> firstLayer.getSecondLayer().getThirdLayer().getFoo()).ifPresent(System.out::println);
}

其中,Supplier是一种函数式接口(Functional Interface),就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被实现为anonymous class,更进一步可以转换为lambda表达式,如果只是调用了一个函数,还可以用method reference。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/74776.html

相关文章

  • Java 8 中避免 Null 检查

    摘要:在中避免检查原文译者来源在中避免检查如何预防中著名的异常这是每个初学者迟早会问到的关键问题之一。引用的发明者在年道歉,并称这种错误为他的十亿美元错误。但幸运的是这在中得到了改善。检查是在底层自动处理的。 在 Java 8 中避免 Null 检查 原文:Avoid Null Checks in Java 8 译者:ostatsu 来源:在 Java 8 中避免 Null 检查 如何预...

    ethernet 评论0 收藏0
  • Java8实战》-第十章笔记(用Optional取代null)

    摘要:是第一批在堆上分配记录的类型语言之一。实际上,的这段话低估了过去五十年来数百万程序员为修复空引用所耗费的代价。很明显,这种方式不具备扩展性,同时还牺牲了代码的可读性。是目前程序开发中最典型的异常。完成这一任务有多种方法。 用Optional取代null 如果你作为Java程序员曾经遭遇过NullPointerException,请举起手。如果这是你最常遭遇的异常,请继续举手。非常可惜,...

    flybywind 评论0 收藏0
  • [译] Java 中最常见的 5 个错误

    摘要:近日,在上列举了开发中常见的个错误,与君共免。在多线程中并发修改集合内容是非常常见的,因此需要使用并发编程中常用的方法进行处理,例如同步锁对于并发修改采用特殊的集合等等。在单线程和多线程情况下解决这个问题有微小的差别。 在编程时,开发者经常会遭遇各式各样莫名错误。近日,Sushil Das 在 Geek On Java上列举了 Java 开发中常见的 5 个错误,与君共「免」。 原文...

    chemzqm 评论0 收藏0
  • Java8(5):使用 Optional 处理 null

    摘要:与方法的区别在于,方法传入的参数为一个接口的实现当中有值的时候,返回值当中没有值的时候,返回从该获得的值。为的用户没有找到举一个的用途在的控制器中,我们可以配置统一处理各种异常。 写过 Java 程序的同学,一般都遇到过 NullPointerException :) —— 为了不抛出这个异常,我们便会写如下的代码: User user = getUserById(id); if (u...

    liuchengxu 评论0 收藏0
  • java 8 实战》读书笔记 -第十章 用Optional取代null

    摘要:但返回的是一个类型的对象,这意味着操作的结果是一个类型的对象。反之,如果对象存在,这次调用就会将其作为函数的输入,并按照与方法的约定返回一个对象。 一、Optional 类入门 Java 8中引入了一个新的类java.util.Optional。变量存在时,Optional类只是对类简单封装。变量不存在时,缺失的值会被建模成一个空的Optional对象,由方法Optional.empt...

    时飞 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<