码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【Java】Optional


    Optional主要是为了解决 NullPointerException (空指针异常) 的问题。

    一般我们在处理空指针异常的问题都会使用条件判断语句,然后再进行操作。

    这种其实理论上并没有什么问题,但是它会带来深度嵌套的问题,导致代码膨胀从而导致代码可读性十分糟糕。

     

    创建optional对象

    1. 声明一个空的 Optional

    Optional opt = Optional.empty();

    2. 依据一个非空值创建 Optional

    1. Optional opt = Optional.of(value);
    2. // if value is null will throw NullPointerExeption
    3. 3. 可接受null的 Optional

      1. Optional opt = Optional.ofNullable(value);
      2. // if valuse is null. opt will get an empty value
      3. 4. 使用map从 Optional对象中提取值

        1. Optional optObject = Optional.ofNullable(object1);
        2. Optional opt = optObject.map(Object1 :: getObject2);

        这种仅能在操作一个对象时使用,多个对象时无法使用。

        比如以下案例

        1. public String getCarInsuranceName(Person person) {
        2. return person.getCar().getInsurance().getname();
        3. }

        如果使用map方式是使用可能是

        1. Optional optPerson = Optional.of(person);
        2. Optional name = optPerson.map(Person::getCar)
        3. .map(Car::getInsurance)
        4. .map(Insurance::getName);

        但是这种方法会报错。首先 optPerson是Optional类型的变量。

        通过map方法操作的结果是一个Optional 类型的对象,此时一位着,map操作了一个 Optional> 。此时去调用 getInsurance 就是一个非法操作了。

        5. 使用flatMap 链接 Optional 对象

        用于连接多个对象的情况

        1. Optional optPerson = Optional.of(person);
        2. Optional name = optPerson.flatMap(Person::getCar)
        3. .flatMap(Car::getInsurance)
        4. .map(Insurance::getName)
        5. .orElse("Unknow");
      4. 相关阅读:
        董事长孙进任职资格获批,盛京银行坎坷向前
        电脑屏幕亮度怎么调节?台式电脑找不到屏幕亮度怎么办
        java计算机毕业设计基于安卓Android微信的酒店宾馆预约预定管理系统 uniAPP
        前端vue实现目录锚点跳转及滚动到指定内容区域(带源码)
        VNC Viewer方式的远程连接树莓派
        使用正确的命令重启WSL子系统
        项目成本控制如何帮助项目成功?
        存量时代的面经
        ArcGIS属性域和子类型
        ArcMap对遥感图像进行语义分割标注
      5. 原文地址:https://blog.csdn.net/weixin_42078672/article/details/128071759
        • 最新文章
        • 攻防演习之三天拿下官网站群
          数据安全治理学习——前期安全规划和安全管理体系建设
          企业安全 | 企业内一次钓鱼演练准备过程
          内网渗透测试 | Kerberos协议及其部分攻击手法
          0day的产生 | 不懂代码的"代码审计"
          安装scrcpy-client模块av模块异常,环境问题解决方案
          leetcode hot100【LeetCode 279. 完全平方数】java实现
          OpenWrt下安装Mosquitto
          AnatoMask论文汇总
          【AI日记】24.11.01 LangChain、openai api和github copilot
        • 热门文章
        • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
          奉劝各位学弟学妹们,该打造你的技术影响力了!
          五年了,我在 CSDN 的两个一百万。
          Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
          面试官都震惊,你这网络基础可以啊!
          你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
          心情不好的时候,用 Python 画棵樱花树送给自己吧
          通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
          13 万字 C 语言从入门到精通保姆级教程2021 年版
          10行代码集2000张美女图,Python爬虫120例,再上征途
        Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
        正则表达式工具 cron表达式工具 密码生成工具

        京公网安备 11010502049817号