Optional类

一、概述

泛型类、java8引进的、java.util包里

二、作用

解决空指针异常带来的不便

三、做法

将对象封装为一个Optional对象,如果封装的对象为空(即该对象不存在),可以使用默认值和或者执行默认操作

四、方法

1、empty() 创建空的Optional对象,对象里面不包含任何值(包括null),不会抛出NullPointerException异常

Optional<String>optional=Optional.empty();

使用Optional变量时,可以使用empty()创建一个空Optional对象对变量作初始化

2、of(T value)创建一个包含指定值的Optional对象

String s=null;
Optional.of(s);

传入非null值不报错,传入null值运行时会抛出NullPointerException异常

3、ofNullable(T value)创建包含指定值的Optional对象,指定值可以是非null值,也可以是null值,值为null是会返回一个空Optional对象(不包含任何值)

String s="abc";
Optional<String>optional=Optional.ofNullable(s);
String s1=null;
Optional<String>optional1=Optional.ofNullable(s1);

4、isPresent()用于判断Optional对象中是否存在非null值,存在返回true,不存在返回false

public static void main(String[] args) {
        String s="abc";
        Optional<String>optional=Optional.ofNullable(s);
        String s1=null;
        Optional<String>optional1=Optional.ofNullable(s1);
        if(optional.isPresent()){
            System.out.println("存在");
        }else{
            System.out.println("不存在");
        }
        if(optional1.isPresent()){
            System.out.println("存在");
        }else{
            System.out.println("不存在");
        }
    }

5、isEmpty()用于判断Optional对象是否为空,为空返回true,不为空返回false

此方法是jdk11中新增的方法

6、get()用来获取包装在Optional对象中的值,Optional对象不能为空,否则在运行时会抛出NoSuchElementException异常

public static void main(String[] args) {
        String s="abc";
        Optional<String>optional=Optional.ofNullable(s);
        String s1=null;
        Optional<String>optional1=Optional.ofNullable(s1);
        System.out.println(optional1.get());
}

7、orElse(T other)用于在Optional对象不包含非null值时提供默认值

情况1

public static void main(String[] args) {
        String s=null;
        Optional<String>optional=Optional.ofNullable(s);
        if(!optional.isPresent()){
            String defaultStr=optional.orElse("cde");
            System.out.println("optional的默认值是"+defaultStr);
        }
}

情况2

public static void main(String[] args) {
        String s=null;
        Optional<String>optional=Optional.ofNullable(s);
        if(!optional.isPresent()){
            String defaultStr=optional.orElse(null);
            System.out.println("optional的默认值是"+defaultStr);
        }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/663778.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Qt秘籍】[006]-Qt 的 Hello World程序-编程第一步

"Hello,World!" 中文意思是“你好&#xff0c;世界”。 因为 The C Programming Language 中使用它做为第一个演示程序&#xff0c;后来很多程序员在学习编程或进行设备调试时延续了这一习惯。 下面&#xff0c;我们也将演示Qt中的"Hello World!" 我们先创…

【脚本篇】---spyglass lint脚本

目录结构 sg_lint.tcl &#xff08;顶层&#xff09; #1.source env #date set WORK_HOME . set REPORT_PATH ${WORK_HOME}/reports puts [clock format [clock second] -format "%Y-%m-%d %H:%M:%S"] #2.generate source filelist #3.set top module puts "##…

Ehcache Java 缓存框架

详解 下图是 Ehcache 在应用程序中的位置&#xff1a; Ecache 是一个广泛使用的 Java 缓存框架&#xff0c;能够有效提升应用性能&#xff0c;并减少与后端数据库的交互次数。它采用了一系列高级缓存策略&#xff0c;包括内存缓存、磁盘缓存、分布式缓存等&#xff0c;并提供了…

战略合作 | 竹云赋能雁塔区数字经济高质量发展

2024年5月30日&#xff0c;由西安市数据局指导&#xff0c;中共西安市雁塔区委、西安市雁塔区人民政府主办的 “雁塔区企业数字化转型发展大会” 在西安开幕。 本次活动以“数智雁塔&#xff0c;引领未来”为主题&#xff0c;特邀业内150余位政府、数字化服务企业、传统行业企…

木叶飞舞之【机器人ROS2】篇章_第三节、给turtlebot3安装realsense深度相机

我们做视觉slam时会用到深度相机&#xff0c;但是gazebo的turtlebot3中只有rgb相机&#xff0c;没有深度&#xff0c;因此本节会修改代码&#xff0c;来给我们的小乌龟增加一个rgbd相机。 效果展示 发布topic如下图 图片大小都是640*480 1. 修改model.sdf文件 1.1 路径位置…

idea项目一直在build

IDEA项目一直在build的原因可能包括构建进程堆大小过小、缓存问题、依赖包下载缓慢或网络问题。12 构建进程堆大小过小&#xff1a;如果IDEA的构建进程堆大小设置得不够大&#xff0c;可能会导致构建过程缓慢或卡顿。解决方法是将构建进程堆大小参数扩大&#xff0c;例如将700…

Pont在小程序开发的使用

Pont是一个很好的前后端桥&#xff0c;但是有个问题。默认产生的代码&#xff0c;无法支持微信小程序开发。根本原因是因为使用了window给全局的对象注入了API和refs属性&#xff0c;由于小程序没有window属性&#xff0c;当然就无法使用了&#xff0c;解决办法也比较简单。只需…

618适合入手哪些数码好物?实用数码好物清单分享,错过拍烂大腿!

在一年一度的618购物狂欢节里&#xff0c;许多数码爱好者们都在这次盛大的购物盛宴中觅得心仪的数码好物&#xff0c;数码产品不仅改变了我们的生活方式&#xff0c;更让我们享受到了前所未有的便捷和乐趣&#xff0c;那么在这个618&#xff0c;哪些数码好物值得我们入手呢&…

Vulnhub项目:doubletrouble

1、靶机地址 靶机地址&#xff1a;doubletrouble: 1 ~ VulnHubdoubletrouble: 1, made by tasiyanci. Download & walkthrough links are available.https://vulnhub.com/entry/doubletrouble-1,743/ 靶机介绍&#xff1a;看这个名字&#xff0c;就觉得内有玄机&#xff…

git随记

git status 查看文件状态 git status -s 比较简洁的查看文件状态。如下代表此文件是新建的&#xff0c;没有被git跟踪的文件&#xff1a; $ git status -s ?? abc.txtgit add abc.txt 将abc添加到暂存区。后再次git status -s $ git status -s A abc.txtgit reset 将暂存…

Java中的枚举(Enum)

基本概念 Java 枚举是一个特殊的类&#xff0c;一般表示一组常量&#xff0c;比如一年的 4 个季节&#xff0c;一个年的 12 个月份&#xff0c;一个星期的 7 天&#xff0c;方向有东南西北等。 Java 枚举类使用 enum 关键字来定义&#xff0c;各个常量使用逗号&#xff08;,&…

android gradle8.3 发布插件踩过的坑

之前写过gradle6.x和gradle7.x的插件&#xff0c;会有一些改动&#xff0c;到8.x我发现又有一些变化&#xff0c;记录一下&#xff0c;防止后边再遇到相同的情况 下边是插件的gradle文件配置 plugins {id("java-gradle-plugin") //会自动引入java-library、gradleAp…

【Linux】 管道扩展 — 开始使用命名管道

送给大家一句话&#xff1a; 人生有六个字&#xff0c;前面三个是不害怕&#xff0c;后面三个是不后悔。 -- 董卿 &#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506;&#x1f506; 命名管道的功能实现 1 命名管道的原理2 代码实…

ROS2从入门到精通2-1:launch多节点启动与脚本配置

目录 0 专栏介绍1 ROS2的启动脚本优化2 ROS2多节点启动案例2.1 C架构2.2 Python架构 3 其他格式的启动文件3.1 .yaml启动3.2 .xml启动 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的…

博客星球大冒险:用Spring Boot和JWT打造你的数字王国

揭秘如何在Spring Boot中无缝集成JWT&#xff0c;为你的应用打造一个高度可扩展且安全的认证系统。从添加依赖到创建JWT过滤器&#xff0c;再到实现令牌的有效性管理和刷新机制&#xff0c;每一步都精心设计&#xff0c;确保你的乐园能够迎接成千上万的游客&#xff01; 文章目…

AltiumDesigner/AD添加数据库连接

1.首先确保本机电脑有无对应的数据库驱动&#xff0c;例如我这边要添加MySQL的数据&#xff0c;则需要首先下载MySQL数据驱动&#xff1a;MySQL :: Download MySQL Connector/ODBC (Archived Versions) 2.运行“odbcad32.exe”&#xff0c;如下图添加对应的数据库配置&#xf…

基于深度学习的模糊认知图方法

1 文章信息 文章题目为“Deep Fuzzy Cognitive Maps for Interpretable Multivariate Time Series Prediction”&#xff0c;该文于2019年发表于“IEEE TRANSACTIONS ON FUZZY SYSTEMS”。文章提出了深度模糊认知图&#xff08;FCM&#xff09;用于多变量时间序列预测&#xff…

一个良好的嵌入式系统框架(基于FreeRTOS)

目录 Unix操作系统里的优先级嵌入式系统里的优先级 Unix操作系统里的优先级 在《Unix传奇》中有这样一句话&#xff0c;用户态的进程/线程是三等公民、root线程是二等公民、硬件中断是一等公民。 在操作系统中&#xff0c;"用户态"和"内核态"是两种不同的…

BERT模型学习(1)

BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;由谷歌在2018年推出&#xff0c;迅速成为自然语言处理&#xff08;NLP&#xff09;领域的一个突破性成果。 基本概念 在深入了解BERT之前&#xff0c;需要先简单了解一下自然语言处理&a…

五分钟“手撕”链表

为了提高大家的学习效率&#xff0c;我把代码放开头&#xff0c;供查阅。 目录 一、链表的实现代码 二、什么是链表 三、链表的分类 四、链表的常见操作 插入 删除 五、Java自带的LinkedList 两个构造方法 一些常用方法 六、LinkedList的遍历 七、ArrayList和Linke…