乐趣区

关于java:Java-8中引入的Optional类详解附示例代码

Optional 类是 Java 8 中引入的用于解决可能为 null 的值的容器类。它提供了一组办法来防止显式的 null 检查和解决,从而缩小空指针异样的危险,并使代码更加简洁和可读。上面是对于如何应用 Optional 类的具体解说。

  1. 创立 Optional 对象:
  • 应用 Optional.of(value):创立一个蕴含非 null 值的 Optional 对象。如果传入的 value 为 null,将会抛出 NullPointerException。
  • 应用 Optional.ofNullable(value):创立一个蕴含指定值的 Optional 对象,即便传入的 value 为 null。
  1. 查看 Optional 对象中是否有值:
  • 应用 isPresent() 办法:判断 Optional 对象中是否存在非 null 值。如果存在,返回 true;否则,返回 false。
  1. 获取 Optional 对象中的值:
  • 应用 get() 办法:获取 Optional 对象中的非 null 值。如果 Optional 对象中没有值,将会抛出 NoSuchElementException 异样。因而,在调用 get() 办法之前,最好先应用 isPresent() 办法进行查看。
  1. 提供默认值:
  • 应用 orElse(defaultValue) 办法:如果 Optional 对象中有值,则返回该值;否则,返回提供的默认值 defaultValue。
  • 应用 orElseGet(supplier) 办法:如果 Optional 对象中有值,则返回该值;否则,调用提供的 Supplier 函数生成一个默认值并返回。
  1. 抛出异样:
  • 应用 orElseThrow(exceptionSupplier) 办法:如果 Optional 对象中有值,则返回该值;否则,应用指定的异样生成函数 exceptionSupplier 抛出一个异样。
  1. 应用条件操作:
  • 应用 ifPresent(consumer) 办法:如果 Optional 对象中有值,则执行指定的操作 consumer,否则不执行任何操作。
  • 应用 filter(predicate) 办法:如果 Optional 对象中有值,并且该值满足谓词 predicate,返回一个蕴含该值的 Optional 对象;否则,返回一个空的 Optional 对象。
  • 应用 map(function) 办法:如果 Optional 对象中有值,则利用指定的函数 function 到该值,并返回一个蕴含后果的 Optional 对象;否则,返回一个空的 Optional 对象。
  • 应用 flatMap(function) 办法:相似于 map() 办法,然而要求函数 function 返回一个 Optional 对象。

应用 Optional 类能够使代码更具可读性和健壮性。它能够帮忙咱们更好地解决可能为 null 的值,防止了繁琐的 null 检查和解决,提供了一种优雅的形式来解决可能存在的值或者提供默认值或者抛出异样。然而,须要留神的是,适度应用 Optional 可能会使代码变得复杂,因而咱们应该依据理论状况抉择适当的应用 Optional。


以下是一个应用 Optional 的代码示例:

import java.util.Optional;

public class OptionalExample {public static void main(String[] args) {
        String value = "Hello, Optional!";

        // 创立 Optional 对象
        Optional<String> optional = Optional.of(value);

        // 判断值是否存在
        boolean isPresent = optional.isPresent();
        System.out.println("Is value present?" + isPresent);

        // 获取值
        String result = optional.get();
        System.out.println("Value:" + result);

        // 如果值存在,执行操作
        optional.ifPresent(val -> System.out.println("Length:" + val.length()));

        // 转换值
        optional.map(val -> val.toUpperCase())
                .ifPresent(upperCase -> System.out.println("Upper case value:" + upperCase));

        // 如果值不存在,提供默认值
        String defaultValue = optional.orElse("Default Value");
        System.out.println("Default Value:" + defaultValue);

        // 如果值不存在,执行操作获取默认值
        String computedValue = optional.orElseGet(() -> computeDefaultValue());
        System.out.println("Computed Value:" + computedValue);

        // 如果值不存在,抛出异样
        try {String resultOrThrow = optional.orElseThrow(() -> new RuntimeException("Value is required."));
            System.out.println("Result:" + resultOrThrow);
        } catch (RuntimeException e) {System.err.println("Exception:" + e.getMessage());
        }
    }

    private static String computeDefaultValue() {return "Computed Default Value";}
}

打印后果:

Is value present? true
Value: Hello, Optional!
Length: 16
Upper case value: HELLO, OPTIONAL!
Default Value: Hello, Optional!
Computed Value: Hello, Optional!
Result: Hello, Optional!

在上述代码中,咱们首先创立一个 Optional 对象,应用 Optional.of() 办法将一个非空值封装到 Optional 中。而后,咱们能够应用 isPresent() 办法判断值是否存在,应用 get() 办法获取值。

应用 ifPresent() 办法,咱们能够在值存在时执行特定的操作。应用 map() 办法,咱们能够对值进行转换。应用 orElse() 办法,咱们能够在值不存在时提供默认值。应用 orElseGet() 办法,咱们能够在值不存在时执行操作来获取默认值。应用 orElseThrow() 办法,咱们能够在值不存在时抛出异样。

须要留神的是,如果应用 Optional.of() 办法封装一个可能为空的值,并且该值为空,则会抛出 NullPointerException 异样。如果值可能为空,能够应用 Optional.ofNullable() 办法来创立 Optional 对象,该办法会依据值是否为 null 来确定是否为空。

应用 Optional 能够进步代码的可读性和可维护性,防止了繁琐的空指针查看。然而,须要审慎应用 Optional,防止滥用,只在须要解决可能为空的值时应用。

退出移动版