不要告诉别人(java optional.of)java的选择语句,Java 可选Optional,java t default,
Java 8引入了一个java.util.Optional类来优雅地处理NullPointerException。
Optional是可以包含或不包含非空值的非空值的包装器。
可能返回null的方法应返回Optional,而不是null。
如果其包含非空值,则来自可选<T>的isPresent()返回true,否则返回false。
如果get()方法包含非空值,则返回非空值,否则抛出NoSuchElementException。
当一个方法返回一个可选,你必须检查它是否包含一个非空值,然后再询问它的值。
如果在确保它包含非空值之前调用了get()方法,则会抛出NoSuchElementException,而不是抛出NullPointerException。
创建可选对象
Optional <T>类提供了三个静态工厂方法来创建Optional对象。
<T>可选<T> empty()返回一个空的Optional。从此方法返回的可选<T>不包含非空值。<T>(T值)的可选<T>返回一个包含指定值作为非空值的Optional。如果指定的值为null,它会抛出NullPointerException。<T>可选的T值(T值)如果值为非空,则返回包含指定值的Optional。如果指定的值为null,则返回一个空的Optional。以下代码显示如何创建Optional对象:
import java.util.Optional;public class Main {public static void main(String[] args) {Optional<String> empty = Optional.empty();System.out.println(empty);Optional<String> str = Optional.of("www.w3cschool.cn");System.out.println(str);String nullableString = "";Optional<String> str2 = Optional.of(nullableString);System.out.println(str2);}}上面的代码生成以下结果。
例2
如果包含非空值,以下代码将在可选中打印值:
import java.util.Optional;public class Main {public static void main(String[] args) {Optional<String> str = Optional.of("www.w3cschool.cn");if (str.isPresent()) {String value = str.get();System.out.println("Optional contains " + value);} else {System.out.println("Optional is empty.");}}}上面的代码生成以下结果。
可选ifPresent
if Present(Consumer<? super T> action)方法对Optional中包含的值执行操作。
如果Optional是空的,这个方法不做任何事情。
以下代码打印出来自Optional的内容。
import java.util.Optional;public class Main {public static void main(String[] args) {Optional<String> str = Optional.of("www.w3cschool.cn");str.ifPresent(value -> System.out.println("Optional contains " + value));}}上面的代码生成以下结果。
如果Optional是空的,代码将不会打印任何东西。
可选值
以下是获取可选值的四个方法:
T get()返回Optional中包含的值。如果Optional是空的,它会抛出一个NoSuchElementException异常。T orElse(T defaultValue)返回Optional中包含的值。如果Optional为空,它返回指定的defaultValue。T orElseGet(Supplier<? extends T> defaultSupplier)返回Optional中包含的值。如果Optional为空,则返回从指定的defaultSupplier返回的值。<X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) throws X extends Throwable返回Optional中包含的值。如果Optional为空,它将抛出从指定的exceptionSupplier返回的异常。OptionalInt,OptionalLong和OptionalDouble处理可选的基本值。
OptionalInt类中的getAsInt()方法返回int值。getAsLong()方法从OptionalLong类返回long值。getAsDouble()方法从OptionalDouble类返回double值。基本可选类的getters当它们为空时也会抛出NoSuchElementException。
以下代码显示了如何使用OptionalInt类:
import java.util.OptionalInt;public class Main {public static void main(String[] args) {OptionalInt number = OptionalInt.of(2);if (number.isPresent()) {int value = number.getAsInt();System.out.println("Number is " + value);} else {System.out.println("Number is absent.");}}}上面的代码生成以下结果。
流可选值
一些流操作返回可选。 例如,所有流类中的max()方法返回一个可选对象。 当对空流使用max()方法时,返回值是一个没有内容的可选对象。
通过使用可选类,我们可以优雅地处理这些方法的返回值。
以下代码显示了如何使用返回的max()形式的Optional对象。
import java.util.OptionalInt;import java.util.stream.IntStream;public class Main {public static void main(String[] args) {OptionalInt maxOdd = IntStream.of(10, 20, 30).filter(n -> n % 2 == 1).max();if (maxOdd.isPresent()) {int value = maxOdd.getAsInt();System.out.println("Maximum odd integer is " + value);} else {System.out.println("Stream is empty.");}}}本文系作者 @河马 原创发布在河马博客站点。未经许可,禁止转载。
暂无评论数据