【发布时间】:2020-10-08 05:56:51
【问题描述】:
在下面的代码中,我创建了一个新的 ID,检查它是否存在,如果它是唯一的则返回它:
private String generateNewId(List<Item> items) {
do {
String newId = ... // generateNewId from another method
if (items.stream.noneMatch(i -> i.getId().equals(newId))) {
return newId;
}
} while(true);
}
但是,我遇到了 PMD 异常:
- 发现变量“newId”的“DD”异常
- 发现变量“newId”的“DU”异常
来自 PMD 文档:
- DU - 异常:最近定义的变量未定义。这些 异常可能出现在正常的源文本中。
- DD - 异常:A 最近 定义的变量被重新定义。这是不祥之兆,但不一定是 错误。
我尝试将 newId 变量移到循环外,但随后出现错误:lambda 中使用的变量应该是最终的或有效的最终。
如何重构代码以消除这些异常?或者我应该将这些警告视为误报吗?
【问题讨论】:
-
与问题无关,但您不应生成这样的 ID。您拥有的项目越多,所需的时间就越长(生成 n 个 ID 需要 O(n^2) 步)。您应该使用 UUID,这在技术上并不能避免 ID 冲突,但它们太不可能了,所以没关系。
-
@Clashsoft 我知道,不幸的是,这是客户端的要求之一——保持向后兼容性。我更喜欢使用 UUID,我就是不能......
标签: java java-stream static-analysis pmd