java8 的 Optional
所属包:
package java.util;
Optional 就是一个容器
- Optional 无法直接构造因为构造方法是私有的
/**
* Constructs an empty instance.
*
* @implNote Generally only one empty instance, {@link Optional#EMPTY},
* should exist per VM.
*/
private Optional() {
this.value = null;
}
- 构造Optional方式有以下
/**
* Returns an empty {@code Optional} instance. No value is present for this
* Optional.
*/
public static<T> Optional<T> empty() {
@SuppressWarnings("unchecked")
Optional<T> t = (Optional<T>) EMPTY;
return t;
}
/**
* Returns an {@code Optional} with the specified present non-null value.
*
*/
public static <T> Optional<T> of(T value) {
return new Optional<>(value);
}
/**
* Returns an {@code Optional} describing the specified value, if non-null,
* otherwise returns an empty {@code Optional}.
*
*/
public static <T> Optional<T> ofNullable(T value) {
return value == null ? empty() : of(value);
}
Optional使用
public static void main(String[] args) {
Employee employee = new Employee();
employee.setName("zhangsan");
Employee employee1 = new Employee();
employee1.setName("lisi");
Company company = new Company();
company.setName("company1");
List<Employee> employees = Arrays.asList(employee, employee1);
company.setEmployees(employees);
Optional<Company> optional = Optional.ofNullable(company);
// 不推荐用法
if (optional.isPresent()) {
// ....
}
// 推荐用法
System.out.println(optional.map(theCompany -> theCompany.getEmployees())
.orElse(Collections.emptyList()));
}