我对使用Optional
感到好奇。
使用以下代码段
public List<Some> read(
@QueryParam("first_result") @Min(0)
final Integer firstResult,
@QueryParam("max_results") @Min(0)
final Integer maxResults) {
// ...
if (firstResult != null) {
query.setFirstResult(firstResult);
}
// ...
}
当我改变这样的代码时,
ofNullable(firstResult).ifPresent(v -> query.setFirstResult(v));
ofNullable
显然会创建一个冗余对象吗?答案 0 :(得分:3)
答案 1 :(得分:1)
另一个选择是阻止firstResult
首先成为null
,这样您就不必检查它,也可以避免容易出错。
怎么做?这里有一些选择:
如果firstResult
是方法的结果,请以某种方式对该方法进行编码
保证永远不会返回null
(并添加单元测试以进行检查
它)。
将字段类型从Integer
更改为Optional<Integer>
,这样读者就会明白此字段是可选字段,并且必须在使用之前对其进行检查。
更改写入firstResult
的方法的返回类型,使其返回Optional<Integer>
,并使用return Optional.ofNullable(result)
完成该方法。这样接收结果的代码必须在将其存储到字段之前检查返回值,以防止它变为null
。
可能还有其他方法。