IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> java8新特性——Optional -> 正文阅读

[数据结构与算法]java8新特性——Optional

在开发的时候,经常会遇到空指针异常的问题,为避免该问题,java8引入了Optional 类,提前发现数据是否为空,从而根据业务需求决定是否为其提前创建对象。

概念

Optional 类(java.util.Optional) 是一个容器类, 代表一个值存在或不存在,
原来用 null 表示一个值不存在, 现在 Optional 可以更好的表达这个概念。 并且可以避免空指针异常。

相信很多人会好奇Optional 是怎么避免空指针异常的吧,这在“举例”中会详细分析,大体解决思路就是在空指针异常前,在获取对象的时候就会判断是否为空,没有创建默认选项的话,会提前报错,从而在空指针发生前提示,方便定位空指针发生的位置,从而让开发者不必再debug去找问题。

常用方法:

  • Optional.of(T t) : 创建一个 Optional 实例
  • Optional.empty() : 创建一个空的 Optional 实例
  • Optional.ofNullable(T t):若 t 不为 null,创建 Optional 实例,否则创建空实例
  • isPresent() : 判断是否包含值
  • orElse(T t) : 如果调用对象包含值, 返回该值, 否则返回t
  • orElseGet(Supplier s) :如果调用对象包含值, 返回该值, 否则返回 s 获取的值
  • map(Function f): 如果有值对其处理, 并返回处理后的Optional, 否则返回Optional.empty()
  • flatMap(Function mapper):与 map 类似, 要求返回值必须是Optional

举例

创建一个Book对象:

class Book {
    private String name;
    private int page;
    private Type type;

    public Book() {
    }

    public Book(String name, int page, Type type) {
        this.name = name;
        this.page = page;
        this.type = type;
    }

    @Override
    public String toString() {
        return "Book{" +
                "name='" + name + '\'' +
                ", page=" + page +
                ", type=" + type +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Book book = (Book) o;
        return page == book.page && Objects.equals(name, book.name) && type == book.type;
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, page, type);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPage() {
        return page;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public Type getType() {
        return type;
    }

    public void setType(Type type) {
        this.type = type;
    }
}
  1. 获取时异常
    由于在获取Book对象是,是null的,所以直接报错,方便开发者定位到空值的位置
        Optional<Book> empty = Optional.empty();
        empty.get();
java.util.NoSuchElementException: No value present
	at java.util.Optional.get(Optional.java:135)
	at com.atguigu.spring5.test.TestOptional.test1(TestOptional.java:11)
  1. 一般使用默认值填充
        Optional<Book> empty = Optional.empty();
        Book book = empty.orElseGet(() -> new Book("java",100,Type.STUDY));
        System.out.println(book);
Book{name='java', page=100, type=STUDY}
  1. 三种创建方式
        Optional<Book> option1 = Optional.empty();
        Optional<Book> option2 = Optional.of(new Book());
        Optional<Object> option3 = Optional.ofNullable(null);
        Optional<Book> book = Optional.ofNullable(new Book());
  1. map方法
        Optional<Book> option1 = Optional.empty();
        Optional<Book> option2 = Optional.of(new Book("java",100,Type.STUDY));

        Optional<String> s1 = option1.map(Book::getName);
        Optional<String> s2 = option2.map(Book::getName);

        System.out.println(s1);
        System.out.println(s2.get());
Optional.empty
java
  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-05-10 12:08:32  更:2022-05-10 12:09:51 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 3:31:59-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码