Java 8可选<t>获取

时间:2015-06-11 15:17:05

标签: java exception java-8 optional

Java 8可选方法get元素不存在时抛出异常。 为什么抛出异常而不是返回null或者为空?

3 个答案:

答案 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