美文网首页Java学习笔记
01 Java8新特性解析笔记 Optional类--空值异常的

01 Java8新特性解析笔记 Optional类--空值异常的

作者: weir_will | 来源:发表于2017-05-18 16:49 被阅读78次

1.背景

调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null,只有在非空的前提下才能将其作为其他方法的参数;否则的会出现空值异常。
据说在,Java8以前,Google Guava引入了Optionals类来解决NullPointerException,从而避免源码被各种null检查污染,以便开发者写出更加整洁的代码。Java 8也将Optional加入了官方库。

2.Optional的基本使用

  • of() 为非null的值创建一个Optional
    注意:如果传入参数为null,则抛出NullPointerException 。
  • ofNullable() 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
    注意: 可以接受参数为null,区别于 of() 。
//of 为非null的值创建一个Optional
Optional<String> opt_full = Optional.of("helloworld");
//ofNullable() 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
Optional<String> opt_empty = Optional.ofNullable(null);
  • isPresent() 如果值存在返回true,否则返回false
    System.out.println("opt_full:"+opt_full.isPresent());
    System.out.println("opt_empty:"+opt_empty.isPresent());
  • full.get() 如果Optional有值则将其返回,否则抛出NoSuchElementException *
if(opt_full.isPresent()){
      System.out.println("opt_full的内容:"+opt_full.get());
}
  • map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional
    Optional<String> cap = opt_full.map(s->s.toUpperCase());
    System.out.println(cap.get());
  • filter(),为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装
    Optional<String> filter = cap.filter(s->s.length()<6);
    System.out.println(filter);

3.总结

Optional类的提供一些便利的方法和lambda表达式使得,在做程序判空时,十分便利,本文只是对optional的方法简要使用Demo。最后汇总待码如下,实在时太简单了,就不放在github了。
补充知识连接:

import java.util.Optional;

public class Optional_Demo {
    public static void main(String[] args) {
        //of 为非null的值创建一个Optional
        Optional<String> opt_full = Optional.of("helloworld");
        //ofNullable() 为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
        Optional<String> opt_empty = Optional.ofNullable(null);
        
        //isPresent() 如果值存在返回true,否则返回false
        System.out.println("opt_full:"+opt_full.isPresent());
        System.out.println("opt_empty:"+opt_empty.isPresent());
        
        //full.get() 如果Optional有值则将其返回,否则抛出NoSuchElementException
        if(opt_full.isPresent()){
            System.out.println("opt_full的内容:"+opt_full.get());
        }
        //orElse() 如果有值则将其返回,否则返回指定的其它值。
        System.out.println(opt_full.orElse("试图修改内容"));
        System.out.println(opt_empty.orElse("试图修改内容"));
        
        //map 如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional
        Optional<String> cap = opt_full.map(s->s.toUpperCase());
        System.out.println(cap.get());
        
        //如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装
        Optional<String> filter = cap.filter(s->s.length()<6);
        System.out.println(filter);
    }
  }
运行结果

相关文章

  • Java-8-Optional类

    Java-8-Optional类 java8新特性之Optional类 空指针异常是一个运行时异常,对于这一类异常...

  • 01 Java8新特性解析笔记 Optional类--空值异常的

    1.背景 调用一个方法得到了返回值却不能直接将返回值作为参数去调用别的方法。我们首先要判断这个返回值是否为null...

  • JAVA8新特性-Optional类解决NPE问题

    ** JAVA8新特性-Optional类解决NPE问题** API介绍 1、Optional(T value),...

  • Optional源码分析(未完)

    Optional源码分析(未完) Optional 类是Java8的新特性,Optional是一个可以为null的...

  • 一起来学Java8(六)——Optional

    Optional类是Java8新增的一个类,其作用可以有效避免空指针异常。 Optional类的代码比较简单,很容...

  • Java8的Optional类

    今天讲解一下java8的Optional类:以前只知道Optional类是用来解决空指针异常的,并且只知道isPr...

  • JAVA8- Optional-用法浅析

    JAVA8- Optional-用法浅析 简介 java8新引入optional特性,官方说法是更优雅的处理空指针...

  • Optional 类

    Optional 类 声明:java8新特性系列为个人学习笔记,参考地址点击这里,侵删!! 到目前为止,臭名昭著的...

  • Java8-Optional

    Java8引入了全新的Optional类,主要用来处理空指针异常(NullPointerException)。从本...

  • 使用Java 8 Optional类

    从 Java 8 引入的一个很有趣的特性是 Optional 类。Optional 类主要解决的问题是空指针异常...

网友评论

    本文标题:01 Java8新特性解析笔记 Optional类--空值异常的

    本文链接:https://www.haomeiwen.com/subject/dpisxxtx.html