我有一个类似的方法
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()));
}
我有两个问题:
- 这是从一种可选类型转换到另一种类型的最佳方式吗
- 我不太确定这种转变的好处。在客户端代码中,客户端仍然需要进行
optional.isPresent()
检查,而不是null
检查?我不太相信我通过重构获得了什么
感谢
要快速回答您的问题:
-
否。CCD_ 3不用于可选参数。您作为退货类型的使用是正确的,尽管
-
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));