JDK8新特性笔记(二):Optional

JDK8新特性笔记(二):Optional

Optional类主要用于解决空指针异常的问题

代码例子:

public class OptionalDemo01 {

    public static void main(String[] args) {
        Person ps = new Person();

        Optional<Person> ps2 = Optional.of(ps);
        System.out.println("ps2"+ps2);

        Optional<Person> ps1 = Optional.ofNullable(ps);
        if (ps1.isPresent()) {
            System.out.println("optinal对象不为空");
            System.out.println(ps1.get());
            System.out.println(ps1.get().age+"----------"+ps1.get().name);
        }else {
            System.out.println("optinal对象为空");
        }

    }

}

运行结果:

ps2Optional[chapter1.optional_demo.Person@12a3a380]
optinal对象不为空
chapter1.optional_demo.Person@12a3a380
0----------null
  • of(): 如果null值作为参数传入则会抛异常

Optional ps2 = Optional.of(ps);

如果传入的非null则会返回 Optional[]括号内为对象实例

  • ofNullable(): 不知道传入对象是否为null可用

Optional ps1 = Optional.ofNullable(ps);

如果传入的非null则会返回 Optional[]括号内为对象实例,这里和of()类似,但这里传入为null不会抛异常,后面可以在进行进一步判断和处理。

  • isPresent():如果对象不为null则返回true,否则为false
  • **get():用于拿到对象,如果是null会抛异常,一般和isPresent()配合使用 **
Optional<Person> ps1 = Optional.ofNullable(ps);
if (ps1.isPresent()) {
     System.out.println("optinal对象不为空");
     System.out.println(ps1.get());
     System.out.println(ps1.get().age+"----------"+ps1.get().name);
}else {
     System.out.println("optinal对象为空");
}

判断不为空后,就用get()拿到对象,然后就可以调用对象内的get/set构造等方法

  • 兜底 orElse() 用于如果拿到的对象为null则传递一个默认值得情况
Person person1 = null;
Person personDemo = new Person("xiaogui",12);

Person person = Optional.ofNullable(person1).orElse(personDemo);
System.out.println("name:"+person.getName()+";age:"+person.getAge());

运行结果:

name:xiaogui;age:12

这种就是有对象传入就用传入的对象没有就把自己创建的默认的传入。

使用lambda表达式+orElse()的一个例子:

Person person1 = null;
Person personDemo = new Person("xiaogui",12);

Integer integer = Optional.ofNullable(person1).map(obj -> obj.getAge()).orElse(7);
System.out.println(integer);

Integer integer2 = Optional.ofNullable(person1).map(obj -> obj.getAge()).orElse(7);
System.out.println(integer2);

运行结果:

7   //这是第一个传入null的结果
12	//这是传入第二个有初始值对象personDemo的结果
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值