jdk8新增 optional 用法

本文详细介绍了Java 8中的Optional类,用于避免空指针异常。通过创建Optional对象,可以更安全地处理可能为null的值。讲解了Optional的方法如isPresent、get、ifPresent、orElse等,并给出了实例代码,展示了如何在实际编程中改善代码质量,减少空指针问题。

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);
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值