亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> java

掌握 Java 8 Optional:实现空安全代码的实用指南

Optional 是一个容器对象,用于存放非空对象。它通过“值存在”或“值不存在”来表示 null,避免了直接的空值检查。该类提供了多种实用方法,便于以函数式方式处理可能缺失的值。Optional 引入于 Java 8,类似于 Guava 库中的 Optional。

类声明

以下是 java.util.Optional<T> 类的声明:

public final class Optional<T> extends Object

主要方法

序号 方法与说明
1

static <T> Optional<T> empty()

返回一个空的 Optional 实例。

2

boolean equals(Object obj)

判断另一个对象是否与此 Optional 相等。

3

Optional<T> filter(Predicate<? super T> predicate)

若值存在且满足给定断言,则返回描述该值的 Optional,否则返回空 Optional。

4

<U> Optional<U> flatMap(Function<? super T, Optional<U>> mapper)

若值存在,应用返回 Optional 的映射函数并返回结果,否则返回空 Optional。

5

T get()

若值存在则返回该值,否则抛出 NoSuchElementException。

6

int hashCode()

返回值的哈希码,若值不存在则返回 0。

7

void ifPresent(Consumer<? super T> consumer)

若值存在,使用该值调用给定的消费者,否则不执行任何操作。

8

boolean isPresent()

若值存在返回 true,否则返回 false。

9

<U> Optional<U> map(Function<? super T, ? extends U> mapper)

若值存在,应用映射函数,若结果非空则返回描述结果的 Optional。

10

static <T> Optional<T> of(T value)

返回包含指定非空值的 Optional,若传入 null 则抛出 NullPointerException。

11

static <T> Optional<T> ofNullable(T value)

若值非空返回描述该值的 Optional,否则返回空 Optional。

12

T orElse(T other)

若值存在返回该值,否则返回指定的默认值。

13

T orElseGet(Supplier<? extends T> other)

若值存在返回该值,否则调用供给函数获取并返回结果。

14

<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier)

若值存在返回该值,否则抛出由供给函数创建的异常。

15

String toString()

返回适合调试的非空字符串表示。

该类继承自 java.lang.Object 的所有方法。

示例代码

创建以下 Java 程序(例如保存为 Java8Tester.java):

import java.util.Optional;

public class Java8Tester {
    public static void main(String args[]) {
        Java8Tester tester = new Java8Tester();
        Integer value1 = null;
        Integer value2 = 10;

        // ofNullable 允许传入 null
        Optional<Integer> a = Optional.ofNullable(value1);
        // of 要求非空,否则抛出 NPE
        Optional<Integer> b = Optional.of(value2);

        System.out.println(tester.sum(a, b));
    }

    public Integer sum(Optional<Integer> a, Optional<Integer> b) {
        System.out.println("第一个参数是否存在: " + a.isPresent());
        System.out.println("第二个参数是否存在: " + b.isPresent());

        // orElse 提供默认值
        Integer val1 = a.orElse(0);
        // get 直接获取值,值必须存在
        Integer val2 = b.get();
        return val1 + val2;
    }
}

验证结果

编译并运行:

javac Java8Tester.java
java Java8Tester

输出:

第一个参数是否存在: false
第二个参数是否存在: true
10

java

  1. 深入理解 Java final 关键字:变量、方法与类的不可变性
  2. Java instanceof 运算符完全指南:用法、继承与接口检查
  3. 精通 Java 继承:核心概念、类型与实战示例
  4. 深入理解 Java 静态嵌套类:用法、差异与实战示例
  5. 精通 Java 匿名内部类:定义、语法与实战示例
  6. Java 单例模式详解:安全实现与使用指南
  7. 精通 Java 反射:运行时检查类、方法与字段
  8. 精通 Java ArrayList:操作、方法与最佳实践
  9. 掌握 Java ObjectOutputStream:序列化、核心方法与实战示例
  10. 掌握 Java 泛型:构建可复用、类型安全的代码
  11. 掌握 Java 文件操作:java.io 包下的创建、读取、写入与删除
  12. Java 9 Optional 增强:stream()、ifPresentOrElse() 与 or()