优雅解决空指针异常--Optional

本文深入解析了Java 8中Optional类的使用方法,包括构造方法、获取Optional对象、判断值是否存在的技巧,以及如何使用isPresent(), ifPresent(), empty(), orElse()等方法。通过实例演示了Optional在处理可能为null的值时的优雅解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Optional的构造方法

  • 源码中Optional构造方法为私有的,所以不能通过new的方式创建
    在这里插入图片描述在这里插入图片描述

Optional的其他方法

获取Optional对象

- 所以如何获取Optional对象?—>使用of(T value)和ofNullable(T value)方法
of(T value)方法中value是任意类型但是不能为null;
ofNullable(T value)方法value也是任意类型,但是可以为null;

		Optional<Object> optional = Optional.ofNullable(null);
		Optional<Object> optionala = Optional.ofNullable("");
		Optional<Object> optionalb = Optional.ofNullable(1);
		Optional<Object> optionalc = Optional.ofNullable(new Date());
		Optional<Object> optional1 = Optional.of("");
		Optional<Object> optional2 = Optional.of(1);
		Optional<Object> optional3 = Optional.of(new Date());

判断值是否存在

  • isPresent(),如果值存在返回true,否则返回false;
		Optional<Object> optional = Optional.ofNullable(null);
        Optional<Object> optionalb = Optional.ofNullable(1);
        System.out.println(optional.isPresent());//false
        System.out.println(optionalb.isPresent());//true
  • ifPresent(Consumer<? super T> consumer),如果Optional对象里面的值不为null,调用Consumer里面的方法;否则不调用;

执行以下代码,控制台会打印–>optionalb 不为null

	    Optional<Object> optional = Optional.ofNullable(null);
        Optional<Object> optionalb = Optional.ofNullable(1);

        optional.ifPresent(new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.println("optional 为null");
            }
        });

        optionalb.ifPresent(new Consumer() {
            @Override
            public void accept(Object o) {
                System.out.println("optionalb 不为null");
            }
        });

empty() 返回一个空的Optional对象

	Optional<String> empty = Optional.<String>empty();
	Optional<Integer> empty1 = Optional.<Integer>empty();
	System.out.println(empty.toString()==empty1.toString());

orElse(value),如果Optional对象里面的值为null,返回value;否则返回Optional里面的值

	Optional<Integer> optional = Optional.ofNullable(null);
	Optional<Integer> optionalb = Optional.ofNullable(1);
	
	System.out.println(optional.orElse(2)==1);//false
	System.out.println(optionalb.orElse(2)==1);//true

orElseGet(Supplier<? extends T> other) 和orElse(value)一样,只是orElseGet的参数是一个对象

	Optional<Integer> optional = Optional.ofNullable(null);
	Optional<Integer> optionalb = Optional.ofNullable(1);
	
	System.out.println(optional.orElseGet(() -> {
	    return 2;
	})==1);//false
	
	System.out.println(optionalb.orElseGet(() -> {
	    return 1;
	})==1);//true
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值