zoukankan      html  css  js  c++  java
  • JAVA8之妙用Optional解决判断Null为空的问题

    在文章的开头,先说下NPE问题,NPE问题就是,我们在开发中经常碰到的NullPointerException.假设我们有两个类,他们的UML类图如下图所示

    o_optional1.png

    在这种情况下,有如下代码

    user.getAddress().getProvince();

    这种写法,在user为null时,是有可能报NullPointerException异常的。为了解决这个问题,于是采用下面的写法

        if(user!=null){
            Address address = user.getAddress();
            if(address!=null){
                String province = address.getProvince();
            }
        }

    实战使用

    例一

    在函数方法中

    以前写法

        public String getCity(User user)  throws Exception{
                if(user!=null){
                    if(user.getAddress()!=null){
                        Address address = user.getAddress();
                        if(address.getCity()!=null){
                            return address.getCity();
                        }
                    }
                }
                throw new Excpetion("取值错误");
            }

    JAVA8写法

        public String getCity(User user) throws Exception{
            return Optional.ofNullable(user)
                           .map(u-> u.getAddress())
                           .map(a->a.getCity())
                           .orElseThrow(()->new Exception("取指错误"));
        }

    例二

    比如,在主程序中

    以前写法

        if(user!=null){
            dosomething(user);
        }

    JAVA8写法

         Optional.ofNullable(user)
            .ifPresent(u->{
                dosomething(u);
        });

    例三

    以前写法

        public User getUser(User user) throws Exception{
            if(user!=null){
                String name = user.getName();
                if("zhangsan".equals(name)){
                    return user;
                }
            }else{
                user = new User();
                user.setName("zhangsan");
                return user;
            }
        }

    java8写法

        public User getUser(User user) {
            return Optional.ofNullable(user)
                           .filter(u->"zhangsan".equals(u.getName()))
                           .orElseGet(()-> {
                                User user1 = new User();
                                user1.setName("zhangsan");
                                return user1;
                           });
        }

    原文链接:https://blog.csdn.net/zjhred/article/details/84976734

  • 相关阅读:
    python安装
    道德准则
    工作职场
    30岁之前
    互联网产品
    项目经理催活指南
    项目中如何找到优先级,以及工作时间安排
    语音行业相关概念
    cookie sessionStorage localStorage 的异同
    数组中map,forEach和for循环的区别
  • 原文地址:https://www.cnblogs.com/yangsanluo/p/14570018.html
Copyright © 2011-2022 走看看