这是在Java中使用Optional的正确方式吗



我有一个类似的方法

public OutputType convert(InputType input) 
{
if (input == null) {
return null;
}

return OutputType.builder().withSomeProperty(input.getSomeProperty()).build();
}

由于输入参数和返回类型都可能是空的,所以我考虑使用Java8Optional重构相同的参数。下面如果我尝试:

public Optional<OutputType> convert(Optional<InputType> inputOptional) 
{
return inputOptional.map((input) -> new OutputType().setSomeProperty(input.getSomeProperty()));
}

我有两个问题:

  1. 这是从一种可选类型转换到另一种类型的最佳方式吗
  2. 我不太确定这种转变的好处。在客户端代码中,客户端仍然需要进行optional.isPresent()检查,而不是null检查?我不太相信我通过重构获得了什么

感谢

要快速回答您的问题:

  1. 否。CCD_ 3不用于可选参数。您作为退货类型的使用是正确的,尽管

  2. Optional是一个monad。你不应该强制性地使用它,而是以功能性的方式使用

请检查以下代码:

public Optional<OutputType> convert(InputType input) {
return input == null ?
Optional.empty() :
Optional.of(OutputType.builder()
.withSomeProperty(input.getSomeProperty())
.build());
}

至于应该如何使用这种方法,不要只使用Optional.isPresent。根据您的需要使用Optional方法:

InputType someInput = ...;
Optional<OutputType> output = instanceOfYourClass.convert(someInput);
output.ifPresent(o -> System.out.println("This is my output " + o));
// or
output.map(OutputType::getSomeProperty)
.ifPresent(p -> System.out.println("This is my property " + p));

相关内容

  • 没有找到相关文章

最新更新