1 创建optional
Optional<Department> department = Optional.empty(); 创建空对象
Optional<Employee> optEmployee = Optional.of(employee); 创建非空对象
Optional<Employee> optEmployee = Optional.ofNullable(employee); 允许为空的对象
2 optional方法
isPresent 如果值存在返回true,否则返回false
get 有值则将其返回,无值抛异常
ifPresent 值则为其调用(函数描述符为T -> void),否则不做处理
orElse 有值则将其返回,否则返回orElse方法传入的参数(前后类型要一致int string)
orElseGet 类似上述,相当于生成默认值
orElseThrow 有值则将其返回,否则抛出自定义异常
map 有值执行函数(返回optional封装对象),无值返回optional空对象
flatMap 有值执行函数,返回对象,无值返回optional空对象
用法
Optional<Department> opt = Optional.ofNullable(department);
if(opt.isPresent()){
System.out.println(opt.get().getEmployee());
}
girl.ifPresent(g -> System.out.println("我有女朋友,名字是:" + g.getName()));
System.out.println(Optional.empty().orElse("There is no value present!"));
System.out.println(Optional.empty().orElseGet(() -> "There is no value present!"));
try {
Optional.empty().orElseThrow(NoSuchElementException::new);
} catch (Exception e) {
e.printStackTrace();
}
Optional<String> upperName = name.map(String::toUpperCase);
System.out.println(upperName.orElse("No value found"));
upperName = name.flatMap((value) -> Optional.of(value.toUpperCase()));
System.out.println(upperName.orElse("No value found"));
Optional改善一开始的代码:
static String getGirlFriendName(Department department) {
Optional<Department> opt = Optional.ofNullable(department);
return opt.map(Department::getEmployee)
.map(Employee::getGirlFriend)
.map(Girl::getName)
.orElseThrow(NoSuchElementException::new);
}
本文详细介绍了Java 8中的Optional类,用于避免空指针异常。通过创建Optional对象,可以更安全地处理可能为null的值。讲解了Optional的方法如isPresent、get、ifPresent、orElse等,并给出了实例代码,展示了如何在实际编程中改善代码质量,减少空指针问题。
1243

被折叠的 条评论
为什么被折叠?



