在lambda中使用集合时,PMD LocalVariableCouldBeFinal仍然是一个有效的规则?

时间:2018-05-15 11:11:55

标签: java checkstyle pmd

PMD规则记录为 LocalVariableCouldBeFinal

我有一个实用程序来派生相邻节点,这些节点将根据过滤和业务代码填充。

下面的代码清楚地传达了稍后将填充该集合的意图。

因此,这条规则仍然适用?对于在代码中使用集合的任何此类实例,无论这是否是局部变量?

text="TASK {5662}: Task definition"
result="TASK [5662](htttps://somelink.com/task/5662): Task definition"

1 个答案:

答案 0 :(得分:1)

讨厌这条规则(可能是时候让我考虑在我们的项目中禁用它了)。好吧,首先错误消息说它可以是最终的,而不是必须是最终的,这就像一个小推荐,而不是规则本身。

特别是因为你的变量实际上是最终的,我会抑制这个警告,或者更好(可能)完全摆脱它(不确定PMD是否允许这样做)。

但你可以用一个简单的重构来解决这个问题:

return nodes.stream()
            .map(String::toUpperCase)
            .flatMap(n -> getAdjacentNodes(n).stream())
            .filter(nodeId -> !(nodes.contains(nodeId.toLowerCase())))
            .collect(Collectors.toSet());