jdk1.8新特性——Optional类

Java 8增加了很多新的工具类,这里要介绍的就是在开发中非常有用的一个jdk8新增的工具类,java.util.Optional;Optional 类是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。总而言之,Optional 类的引入很好的解决空指针异常,给无数开发者带来便利。

我们先看看下面的例子:

传统的写法: 如果Person对象p为null,那么一个null值调用方法必定会抛出一个空指针异常,也就是p.getName()会抛出空指针异常,同理如果name字符串为空的话,那么name.toUpperCase()同样会抛出空指针异常,所以我们必须在使用他们之前增加if语句进行空值判断,避免空指针异常,这样一来,我们会发现,由于很多if语句的判断,代码看起来非常冗余,并且可读性极差。

public class Main{
	public static void main(String[] args) {
		Person p=null;
		if(p!=null){
			String name = p.getName();
			if(name!=null){
				String s = name.toUpperCase();
				System.out.println(s);
			}
		}	
	}
}

class Person{
	private String name;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

引入jdk8的Optional类的写法:

public static void main(String[] args) {
    String s="ABC";
    Optional<String> optional = Optional.ofNullable(s);
    Optional<String> optional2 = optional.map((value)->value.toLowerCase());
    System.out.println(optional2.get());//abc
}

即使传入的字符串是s是null,也不会报空指针异常

public static void main(String[] args) {
    String s=null;
    Optional<String> optional = Optional.ofNullable(s);
    Optional<String> optional2 = optional.map((value)->value.toLowerCase());
    System.out.println(optional2.orElse("字符串为null"));//字符串为null
}

对于Optional类常用的方法,可以参考该文档:https://www.runoob.com/java/java8-optional-class.html

关于jdk1.8的其它新特性:

  1. jdk1.8新特性——Lambda表达式与函数式接口:https://blog.csdn.net/can_chen/article/details/106886385
  2. jdk1.8新特性——Stream流式编程:https://blog.csdn.net/can_chen/article/details/106886484
  3. jdk1.8新特性——方法引用:https://blog.csdn.net/can_chen/article/details/106886536

猜你喜欢

转载自blog.csdn.net/can_chen/article/details/106886579