【发布时间】:2018-09-22 07:24:48
【问题描述】:
SonarLint 告诉我:
"Refactor this code to not always return the same value."
但我似乎不明白为什么
private List<InvoiceRejectionMessage> invoiceList = new ArrayList<>();
public String getMessage() {
if(!invoiceList.isEmpty()) {
return invoiceList
.stream()
.max(comparing(InvoiceRejectionMessage::getCreatedAt))
.get()
.getMessage();
}
return null;
}
InvoiceList 已定义并且将始终被初始化,因此它不能为空,只能为空。如果为空,则返回 null。如果不是,我们确定其中有一个元素可以由 .max() 和 .get() 返回
我不愿意仅仅因为 Sonarlint 告诉我重构这个方法,我宁愿知道为什么我会收到这个警告
【问题讨论】:
-
invoiceList已初始化,但它是一个空数组。你从来没有.Add()什么东西给它。因此.isEmpty()将返回true,您的函数将返回null。 -
@RonNabuurs 它检查代码库的其余部分是否有 .add()?
-
如果我使用 Sonarlint 将 sn-p 复制粘贴到我的 Intellij 中的测试项目中,即使我没有调用
.Add(),我也不会收到错误消息。也许这是某个地方的设置。恐怕我也不知道。 -
文体问题:为什么返回不返回
Optional<String>而不是“可空”String? -
@Jubobs 目前它唯一的用途是在我宁愿保持清洁的 DTO 中;例如dto.setInvoiceMessage(invoice.getMessage)