Java 8可选方法get元素不存在时抛出异常。 为什么抛出异常而不是返回null或者为空?
答案 0 :(得分:2)
如果您想要null,请使用.orElse(null)
。 Optional
的想法是强迫您显式处理缺少值。
答案 1 :(得分:0)
如果需要null或值
,则可以 Optional.orElse(null)Optional optional = Optional.empty();
System.out.println(optional.orElse(null));
如果要执行某些操作或操作,请使用 OptionalifPresent(Consumer operationToPerform)
optional.ifPresent(o->{ // operation to perform
System.out.println(o); });
答案 2 :(得分:-1)
为什么抛出异常而不是返回null或Optional空?
引入了可选选项以使null安全编程。因此,通过Java返回null或空Optional是没有意义的,因为我们将捕获该Optional的值。
有多种方法可以从Optional对象安全地检索值: isPresent() –如果该对象存在于Optional对象中,则此方法返回true。
Optional<GraphicsCard> graphicsCard = Optional.of(new GraphicsCard());
if(graphicsCard.isPresent()) {
System.out.println(graphicsCard.get());
}
ifPresent (消费者使用者)-如果存在值,则使用该值调用指定的使用者,否则不执行任何操作。
Optional<GraphicsCard> graphicsCard = Optional.of(new GraphicsCard());
graphicsCard.ifPresent(System.out::println);
orElse (其他)-返回值(如果存在),否则返回作为参数传递的对象。 Java 8可选类中的orElse()方法的内部。
public T orElse(T other) {
return value != null ? value : other;
}
GraphicsCard newCard = graphicsCard.orElse(new GraphicsCard());
orElseThrow (供应商exceptionSupplier)–返回所包含的值(如果存在),否则抛出异常,该异常将由提供的供应商创建。
GraphicsCard newCard = graphicsCard.orElseThrow(IllegalArgumentException::new);
参考- http://onlyfullstack.blogspot.com/2018/12/optional-in-java-8.html