Java
Python前端运维数据库
Java
Java
  • 新特性
    • Record
    • Optional
  • 面向对象
    • 面向对象基础
    • 构造方法
    • 继承与多态
    • 接口
    • 修饰符
    • 代码块
    • 接口(Interface)
    • 枚举类
  • IO流
    • IO
      • 字节流
      • 字符流
      • 缓冲流
      • 转换流
      • 操作ZIP
      • File 对象
    • NIO
      • Channel和Buffer
      • 异步文件通道AsynchronousFileChannel
      • Selector
      • Path/Files/Pipe
  • 反射
  • 内存分配
  • 集合
    • 简介
    • List
    • Set
    • Map
    • EnumMap
  • 日期与时间
    • Date和Calendar
    • Java8 新时间 ✨
      • LocalDateTime
      • ZonedDateTime
      • Duration
    • 时间格式化
      • SimpleDateFromat
      • DateTimeFormatter ✨
    • Instant
    • 实践
  • 网络编程
    • IP 地址
    • 网络模型
    • TCP 编程
    • UDP 编程
    • HTTP 编程
  • 加密和安全
  • 并发编程
    • 多线程
    • 线程与进程的区别
    • 线程组和线程优先级
    • 线程池
    • 线程锁
  • 异步任务
    • Future
    • CompletableFuture
      • 开启异步任务
      • 串行任务方法
      • 并行任务方法
      • 任务结束方法
      • 异常处理方法
      • 查看状态方法
      • 设置任务结果方法
  • 执行系统命令
  • Stream 流
    • Stream 流的创建
    • Stream 流串行与并行
    • Stream 流中间操作
    • Stream 流终端操作
  • Lambda 表达式
    • Lambda 表达式简介
    • Lambda 表达式语法
    • 方法引用
  • String
  • StringBuffer
由 GitBook 提供支持
在本页
  • 构造 Optional 的三种方式
  • 常用 API
  • ifPresent()
  • map()
  • orElse()
  • orElseGet()
  • orElseThrow()

这有帮助吗?

  1. 新特性

Optional

Optional 是 Java 8 提供的为了解决 null 安全问题的一个 API。 提供了多种方法来处理可能为 null 的值,从而减少空指针异常的风险。

使用 Optional,我们可以把下面的代码进行改写。

public static String getName(User user) {
  if(user ==null || user.name == null) {
    return "Unknown";
  }
  return user.name;
}
// 🅱️ Bad
public static String getName(User user) {
  Optional<User> userOptional = Optional.ofNullable(user);
  if(!user.isPresent()) {
    return "Unknown";
  }
  return user.get().getName();
}

// ✅ Good
public static String getName(User user) {
  return Optional.ofNullable(user).map(User::getName).orElse("Unknown");
}

构造 Optional 的三种方式

public static<T> Optional<T> empty() {
  Optional<T> t = (Optional<T>) EMPTY;
  return t;
}

public static <T> Optional<T> of(T value) {
  return new Optional<>(value);
}

public static <T> Optional<T> ofNullable(T value) {
  return value == null ? empty() : of(value);
}

常用 API

ifPresent()

如果存在值,则执行指定的操作。

Optional<String> optional = Optional.of("Hello");
optional.ifPresent(value -> System.out.println(value)); // 输出: Hello

map()

map 方法能够返回另外一个 Optional 对象。

Optional<String> optional = Optional.of("Hello");
Optional<Integer> length = optional.map(String::length);
System.out.println(length.get()); // 输出: 5

orElse()

如果存在指,返回指定的值,反之返回默认值。

Optional<String> optional = Optional.empty();
String result = optional.orElse("Default Value");
System.out.println(result); // 输出: Default Value

orElseGet()

如果存在指,返回指定的值,调用 other 并返回该调用结果。

Optional<String> optional = Optional.empty();
String result = optional.orElseGet(() -> "Generated Value");
System.out.println(result); // 输出: Generated Value

orElseThrow()

如果存在指,返回指定的值,反之抛出指定的异常。

Optional<String> optional = Optional.empty();
try {
  optional.orElseThrow(() -> new IllegalArgumentException("Value is absent"));
} catch (IllegalArgumentException e) {
  System.out.println(e.getMessage()); // 输出: Value is absent
}
上一页Record下一页面向对象

最后更新于5个月前

这有帮助吗?