Optional 用法

Optional 用法

Optional 类的引入很好的解决空指针异常,它可以保存类型T的值,或者仅仅保存null;
下面讲解常见用法
1:ofNullable
    括号里面是否为nullnull则设置新对象
2:orElse
    前面ofNullable括号里面是否  为nullnull则新建对象
3:ifPresent
    前面ofNullable括号里面是否  不为null    不为null则执行方法
4:filter
    前面ofNullable括号里面是否  不为null 则进行对比 不正确则设置原对象变为新对象
    
         //optional 依旧有Optional 的所有方法
    Optional optional = Optional.ofNullable(null);
         //object 已经没有Optional 的方法了
    Object object = Optional.ofNullable(null);


 Optional源码分析:
 
     //判断ofNullable里面的对象对象是否为NUll  
    public static <T> Optional<T> ofNullable(T value) {   
        return value == null ? empty() : of(value);
    }

    //为Null 则新建一个new Optional (Object)对象  该对象的 value=null
    public static<T> Optional<T> empty() {    
        Optional<T> t = (Optional<T>) new Optional<>();
        return t;
    }    
    
    //不为Null 则返回对象  同时使得  value  等于 该对象
    public static <T> Optional<T> of(T value) {    
        return new Optional<>(value);
    }
    
        
    Person person = new Person();
    person.setName("HeSuiJin");
    
    Object personTemp2 = Optional.ofNullable(null).orElse(new Person());
    log.info("我是Person啊:{}", JSONObject.toJSONString(personTemp2));
    
    Object personTemp1 = Optional.ofNullable(person).orElse(new Person());
    log.info("我是Person啊:{}", JSONObject.toJSONString(personTemp1));
    

    Optional源码分析:orElse
  
    //Optional类型的对象 紧接着去调用该方法 
    //如果是New出来的 Optional 则 value =null
    //如果 value!=null 则返回原来的对象 value  如果为null  则返回新对象 other
    public T orElse(T other) {    
        return value != null ? value : other;
    }
   
   
        Optional.ofNullable(person).ifPresent(
             a->  System.out.println(JSONObject.toJSONString(a))
        );

     Optional源码分析:ifPresent
     
     // ifPresent 入参为  Consumer类型的 lambda表达式
     //当 value != null 时重写 accept方法
     //入参为 value(对象)
     
    public void ifPresent(Consumer<? super T> consumer) {    
        if (value != null)        
        consumer.accept(value);
    }


Optional<Person> person = Optional.ofNullable(person).filter(
        a -> "我的名字".equals(a.getName())
);


Optional源码分析:filter

//filter入参为  Predicate类型的 lambda表达式
//isPresent 为   value非空      

// !isPresent 为value空    则返回:new Optional (Object)对象  
        //否则 重写test(value)方法
             //成立   则返回原本的对象
             //不成立  则返回 :new Optional (Object)对象  

public Optional<T> filter(Predicate<? super T> predicate) {  
    Objects.requireNonNull(predicate);   
    if (!isPresent())       
         return this;    
    else        
         return predicate.test(value) ? this : empty();
   }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值