一,Optional概述
java8 引入了Optional类,主要是为了解决NPE问题,正如Brian Goetz和Steward Marks所说的那样:我们的目的是为库方法的返回类型提供一种有限的机制,其中需要一种明确的方式来表示“无结果”,并且对于这样的方法使用null绝对可能导致错误。
二,Optional方法详解
orElse方法
特性:不存在则返回另外一个值
public T orElse(T other) {
return value != null ? value : other;
}
示例:
//如果hello不存在则打印world
Optional<String> optionalS2 = Optional.empty();
System.out.println(optionalS2.orElse("world"));
orElseGet方法
特性:与orElse方法同义,可接Supplier接口
示例:
System.out.println(optionalS2.orElseGet(() -> "ni hao"));
三,推荐使用场景以及警示
比如从数据库查询了一个list,当list为空的时候,建议返回一个空的list,而不是null,因为使用null可能造成NPE问题。 示例
//MOCK 返回的结果
Employee employee = new Employee("zhansan", 10);
Company company = new Company();
company.setEmpList(Arrays.asList(employee));
//如果Employee为空,则返回一个空的集合
Optional<Company> optionalCompany = Optional.ofNullable(company);
return optionalCompany.map((theCompany) -> theCompany.getEmpList()).orElse(Collections.emptyList());
警示
由于Optional未实现Serializable接口,因此尽量避免把Optional作为参数传递.