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

文章目录

    • Optional的构造方法
    • Optional的其他方法
      • 获取Optional对象
      • 判断值是否存在

Optional的构造方法

  • 源码中Optional构造方法为私有的,所以不能通过new的方式创建
    优雅解决空指针异常--Optional_第1张图片优雅解决空指针异常--Optional_第2张图片

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 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 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

你可能感兴趣的:(java)