Java8 Optional实例操作

举报
西魏陶渊明 发表于 2022/09/25 01:44:10 2022/09/25
【摘要】 Java中常见的NPE错误真实伤害了一大推程序猿,不过JDK8之后,终于出现了,一个可以解决这个问题的API,这个就是Optional。 首先看这个源码的构造方法 Optional.ofNullable(null)//如果null就返回一个空对象public static <T> Optional<...

Java中常见的NPE错误真实伤害了一大推程序猿,不过JDK8之后,终于出现了,一个可以解决这个问题的API,这个就是Optional。

  • 首先看这个源码的构造方法

    • Optional.ofNullable(null)
    
            //如果null就返回一个空对象
            public static <T> Optional<T> ofNullable(T value) {
               return value == null ? empty() : of(value);
            }
            //EMPTY private static final Optional<?> EMPTY = new Optional<>();
            public static<T> Optional<T> empty() {
               @SuppressWarnings("unchecked")
               Optional<T> t = (Optional<T>) EMPTY;
               return t;
            }
        
       
    • Optional.of(null) 异常
    
            //使用静态方法of,这个值会进行非null判断,如果null直接就报异常
            public static <T> Optional<T> of(T value) {
               return new Optional<>(value);
            }
            private Optional(T value) {
               this.value = Objects.requireNonNull(value);
            }
        
       
  • 然后使用这个APi的接口方法,通过和传统的对比

    • 传统方式获得User的名字name
    
            要对if(!=null){
                return user.getName();
            }
        
       
    • 新方式
    
            Optional<User> opts = Optional.ofNullable(new User("liuxin1"));
            opts.orElse("liuxin2").getName();//如果存在就返回已经存在的,如果不存在就返回liuxin2
            这段代码返回的是:liuxin1
            //orElseGet,返回就的是一段函数,就是{}里面的,这个是lambda表达式,如果不会,可以看上一教程
            String name = opts.orElseGet(() -> {
                   return new User("1");
                }).getName();
            System.out.println(name);//1
        
       
    • map方法 ,lambdm表达式
    
            opts.map(user -> {
                   return user.getName();
                }).map(name -> {
                   return name.toUpperCase();
                }).ifPresent(System.out::println);
        
       
    • opts.isPresent() 存在就true,反之false

常用的就这些了,就这样喽,主要靠理解,少年加油⛽️

文章来源: springlearn.blog.csdn.net,作者:西魏陶渊明,版权归原作者所有,如需转载,请联系作者。

原文链接:springlearn.blog.csdn.net/article/details/102425317

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。