首页 > 其他分享 >Optional.ofNullable()方法, 参数list或者map如果为null执行 ofNullable(创建个新对象返回),参数如果不为null执行orElse里面的处理逻辑

Optional.ofNullable()方法, 参数list或者map如果为null执行 ofNullable(创建个新对象返回),参数如果不为null执行orElse里面的处理逻辑

时间:2023-10-29 20:12:14浏览次数:30  
标签:ofNullable list value 参数 static null Optional

Optional.ofNullable()方法

举个栗子

  1. public static void main(String[] args) {
  2. List<String> list = null;
  3. list.forEach(x -> System.out.println(x));
  4. }

工作中经常会遇到,查询返回空,如果没有判空处理,一不小心就会空指针异常。加上if判断处理也可以,但是jdk1.8有更优雅的处理方式。

  1. public static void main(String[] args) {
  2. List<String> list = null;
  3. List<String> newList = Optional.ofNullable(list).orElse(Lists.newArrayList());
  4. newList.forEach(x -> System.out.println(x));
  5. }

先解释代码含义:如果list集合不为空,将list集合赋值给newList;如果list集合为空创建一个空对象集合赋值给newList,保证list集合永远不为空,也就避免了空指针异常。(为了更好的理解,分开写了,比较庸俗,实际工作中都是一行搞定,哈哈哈)

再看看源码:底层是怎么处理的,怎么就避免了空指针呢?

  1. //静态变量 empty
  2. private static final Optional<?> EMPTY = new Optional<>();
  3. //如果对象为空,执行empty()方法;不为空,执行of(value)方法
  4. public static <T> Optional<T> ofNullable(T value) {
  5. return value == null ? empty() : of(value);
  6. }
  7. public static<T> Optional<T> empty() {
  8. @SuppressWarnings("unchecked")
  9. Optional<T> t = (Optional<T>) EMPTY;
  10. return t;
  11. }
  12. public static <T> Optional<T> of(T value) {
  13. return new Optional<>(value);
  14. }

1.首先执行ofNullable()方法,如果T对象为空,执行empty()方法;不为空,执行of(value)方法;
2.empty()方法,初始化一个空对象Optional(空对象和null不是一回事哈);

3.of(value)方法,将泛型对象T用于Optional构造方法的参数上,返回一个有值的对象

4.经过上面两步,从而保证了Optional不为null,避免了空指针;

如果清晰了,请为互联网美少女刘可爱点个赞吧。

原文链接:https://blog.csdn.net/lxj_1993/article/details/109451567

标签:ofNullable,list,value,参数,static,null,Optional
From: https://www.cnblogs.com/sunny3158/p/17796326.html

相关文章

  • **(双星号/星号)和 *(星号/星号)对参数有什么作用?
    内容来自DOChttps://q.houxu6.top/?s=**(双星号/星号)和*(星号/星号)对参数有什么作用?在以下函数定义中,*args和**kwargs分别表示什么意思?deffoo(x,y,*args):passdefbar(x,y,**kwargs):pass关于参数的补充问题,可以参考Whatdo**(doublestar/asteris......
  • 函数的参数传递
     ......
  • SOLIDWORKS参数化设计之格式转换 慧德敏学
    现在越来越多的企业开始进行模型的参数化设计规范,不管是使用SOLIDWORKS自带的方程式,还是使用SOLIDWORKS参数化设计插件,参数化的过程其实已经很透明了,都大同小异。我们之前介绍过SolidKits.AutoWorks软件,可以很方便的帮助我们实现参数化改型设计,不仅可以完成三维模型的变化、工程......
  • springMVC controller控制器方法HttpServletRequest等参数的是谁传递进来的
    SpringMVC中两个重要的接口:请求方法参数的处理、响应返回值的处理,分别是HandlerMethodArgumentResolver和HandlerMethodReturnValueHandlerHandlerMethodArgumentResolver的实现类 ServletRequestMethodArgumentResolver 参数类型是实现或继承或是WebRequest、ServletRequest......
  • "最小惊讶"和可变的默认参数
    内容来自DOChttps://q.houxu6.top/?s="最小惊讶"和可变的默认参数"最小惊讶"和可变的默认参数任何长时间使用Python的人都会被以下问题困扰(或者被撕裂):deffoo(a=[]):a.append(5)returnaPython新手会期望这个没有参数的函数总是返回一个只有一个元素的列表:[5]......
  • 系统集成易混淆知识点汇总-参数估算、类比估算、三点估算、自下而上估算
    概念:(1)参数估算:参数估算是一种基于历史数据和项目参数,使用某种算法来计算成本或工期的估算技术。利用历时数据之间的统计关系和其他变量,来估算诸如成本、预算和持续时间等活动参数。(2)类比估算:类比估算是指以过去类似项目的参数值或规模指标为基础,来估算当前项目的同类参数或指标......
  • 【ArcPy】Python工具的参数校验
    在updateMessages方法中检查输入图层数据源的工作空间是否是本地数据,如果不是,设置错误。在updateParameters方法中从图层派生出第4个参数,即输出要素类的路径。注意该参数的类型需要是“派生(Derived)”importarcpyclassToolValidator(object):"""Classforvalidatingatoo......
  • ASEMI高压二极管CL08-RG210参数,CL08-RG210封装
    编辑-ZCL08-RG210参数描述:型号:CL08-RG210反向重复峰值电压VRRM:8000V反向工作峰值电压VRWM:8000V正向平均电流IF:0.5A正向(不重复)浪涌电流IFSM:20A反向恢复时间trr:80ns正向峰值电压VFM:12V反向峰值电流IR:2uA工作环境和存贮温度Ta,TSTG:-40to+150℃  CL08-RG210封装大......
  • ASEMI高压二极管CL08-RG210参数,CL08-RG210封装
    编辑-ZCL08-RG210参数描述:型号:CL08-RG210反向重复峰值电压VRRM:8000V反向工作峰值电压VRWM:8000V正向平均电流IF:0.5A正向(不重复)浪涌电流IFSM:20A反向恢复时间trr:80ns正向峰值电压VFM:12V反向峰值电流IR:2uA工作环境和存贮温度Ta,TSTG:-40to+150℃ CL08-RG210封装大小:直径:7.5mm长度:2......
  • 深度学习(统计模型参数量)
    统计模型参数量,方便判断不同模型大小:importtorchimporttorch.nnasnn#自定义AlexNet模型classAlexNet(nn.Module):def__init__(self):super(AlexNet,self).__init__()self.conv1=nn.Conv2d(1,96,kernel_size=11,stride=4)self.......