java中orElse、orElseGet、orElseThrow辨析

这三个方法都是用于获取 Optional 对象中的值。它们之间的区别如下:

  1. orElse(T other): 如果 Optional 对象中有值,则返回该值,否则返回传入的默认值 other。
    Optional opt1 = Optional.of("first");
    String result1 = opt1.orElse("second");
    System.out.println(result1); // 输出: "first"
    
    Optional opt2 = Optional.empty();
    String result2 = opt2.orElse("second");
    System.out.println(result2); // 输出: "second"

  2. orElseGet(Supplier other): 如果 Optional 对象中有值,则返回该值,否则使用 Supplier 函数生成的默认值 other。
Optional opt1 = Optional.of("first");
String result1 = opt1.orElseGet(() -> "second");
System.out.println(result1); // 输出: "first"

Optional opt2 = Optional.empty();
String result2 = opt2.orElseGet(() -> "second");
System.out.println(result2); // 输出: "second"
  1. orElseThrow(Supplier exception): 如果 Optional 对象中有值,则返回该值,否则抛出由 Supplier 函数生成的异常。
Optional opt1 = Optional.of("hello");
String result1 = opt1.orElseThrow(() -> new RuntimeException("value not found"));
System.out.println(result1); // 输出: "hello"

Optional opt2 = Optional.empty();
String result2 = opt2.orElseThrow(() -> new RuntimeException("value not found"));
// 抛出 RuntimeException: value not found

总结:orElse和orElseThrow的区别在于  () -> "second"。

如果容器为空,orElseThrow就要抛出异常。

你可能感兴趣的:(optional,java)