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

  • 相关阅读:
    窗口和消息
    输出文字
    《windows程序设计》第一章,建议想学API的每天看一章
    hdu 1008为何不对?求大神指导!
    课程设计(物体类),图片可能没有加载出来,自己运行一下就行了
    二叉树前序、中序、后序遍历相互求法
    哈希表工作原理
    c++中关于static关键字的问题
    Halcon学习笔记之缺陷检测(二)
    Halcon学习笔记之缺陷检测(一)
  • 原文地址:https://www.cnblogs.com/yangsanluo/p/14570018.html
Copyright © 2011-2022 走看看