java新特性之Optional类介绍,解决空指针问题的终极类

createh51周前 (03-06)技术教程2

Optional类作用

Optional类被final修饰,是没有子类的工具类。主要作用就是为了避免null检查,防止空指针异常的作用。

以前对null的处理

对于字符串,传统的空指针问题解决方案:

String name = null;
if (name != null) {
  System.out.println(name.length());
} else{
  System.out.println("字符串为空!");
}

这样的写法显得很呆!

创建方式Optional.of(T value)

Optional.of方法创建的Optional对象,不能传入null值

// 通过of方法,of方法不支持null
Optional op1 = Optional.of("zhangsan");
// NullPointerException
Optional<Object> op2 = Optional.of(null);

null值会报空指针异常,原因是调用了Objects.requireNonNull(value)

public static  T requireNonNull(T obj) {
  if (obj == null)
    throw new NullPointerException();
  return obj;
}

创建方式Optional.ofNullable(T value)

Optional.of方法创建的Optional对象,支持传入null值

// 通过ofNullable方法,支持传入null
Optional op1 = Optional.ofNullable("zhangsan");
Optional<Object> op2 = Optional.ofNullable(null);

支持传入null值原因:

public static  Optional ofNullable(T value) {
    return value == null ? empty() : of(value);
}

Optional类解决空指针方案

传入User对象,获取userName属性值,有值把值转大写返回,无值返回空字符串。

public class Test {
    public static void main(String[] args) {
        User user1 = new User();
        user1.setUserName("张三");
        User user2 = new User();
        User user3 = null;
        System.out.println("user1 " + test(user1));
        System.out.println("user2 " + test(user2));
        System.out.println("user3 " + test(user3));
    }

    /**
     * 传入User对象,获取userName属性值,
     * 有值把值转大写返回,
     * 无值返回空字符串。
     */
    public static String test(User user) {
        return Optional.ofNullable(user)
          .map(User::getUserName)
          .map(String::toUpperCase)
          .orElse("");
    }
}

执行效果图

字符串空值处理:

String str = null;
System.out.println(Optional.ofNullable(str).orElse(""));

相关文章

Java 判断对象是否所有属性为空,大家觉得这样写可以吗?

序言:在开发Excel数据导入的时候,后台拿到Excel中的数据并接收到List泛型集合中,发现有很多对象的属性全部为null,想通过代码将这些无效的数据给过滤掉,下面是过滤的具体操作。ObjectU...

java8之Optional 判空,简化判空操作

导语在没有用Optional判空之前,你是否也像下面的代码一样判空呢?如果是,请往下看,Optional 相对传统判空的优势。传统阶层判空为什么要用Optional,它到底是什么东西你也看到了上面的那...

Java中的空指针怎么处理?

#暑期创作大赛#Java程序员工作中遇到最多的错误就是空指针异常,无论你多么细心,一不留神就从代码的某个地方冒出NullPointerException,令人头疼。1. 对象设置默认值Object o...

java 中如何避免空指针

在Java中,空指针异常(NullPointerException)是常见的运行时异常,通常是因为在对一个空对象(null)进行方法调用、字段访问等操作时引起的。为了避免空指针异常,可以采取以下几种方...

告别空指针-Kotlin这一点把Java比下去了

写Java的各位想必没少被空指针异常(NullpointException)困扰,但在Kotlin中,我们终于可以跟它Say Goodbye了。严格来说,Kotlin中不是消灭了空指针异常,而是通过更...

工作5年总结9种方式,帮你减少Java程序中80%的空指针异常

Java程序员工作中遇到最多的错误就是空指针异常,无论你多么细心,一不留神就从代码的某个地方冒出NullPointerException,真是令人头疼。到底怎么避免空指针异常?下面的方法能够帮助你。1...