令人困惑的声纳错误

时间:2017-08-30 14:18:39

标签: java sonarqube

声纳显示我有这个错误 A "List<String>" cannot contain a "T"。 错误描述是

  

不应该进行不适当的“收集”调用

     

参见CERT,EXP04-J。 - 不要将参数传递给与集合参数类型

不同类型的某些Java Collections Framework方法

以下是代码:

List<String> TRUE_VALUES = Arrays.asList("TRUE", "T", "YES", "Y");

以下是我用来确定String值是否为真值的测试:

TRUE_VALUES.contains(value)

为什么Sonar将此标记为错误?

2 个答案:

答案 0 :(得分:1)

这里有很多要考虑的地方。谁定义了您的声纳规则?您是否在使用具有自己的自定义规则集的SonarQube服务器构建代码时收到此声纳违规?您使用SonarLint(一个eclipse插件)有自己的预定义规则集吗?如果您对规则本身不确定,您可以随时尝试确定它的来源,看看您是否真的想遵循该规则,我之前在我当前的位置遇到过这种情况,我们修改了规则集通过一些并非真正适用于我们项目的规则,只需考虑一下......

现在,就您的代码而言,根据您的命名惯例,&#34; TRUE_VALUES&#34;,我惊讶的声纳并没有抱怨它,这是一个最后的领域,你的没有显示出来?如果是,您可以考虑使用简单的字符串数组而不是Collection来存储这些字符串值。如果我的假设是正确的并且您使用Collection来存储静态列表,那么它会破坏使用Collection的目的,为什么不使用String数组并将其保留在下面?

final String[] TRUE_VALUES = {"TRUE", "T", "YES", "Y"};

答案 1 :(得分:0)

我认为错误是因为,Arrays.asList采用了通用类型。

public static <T> List<T> asList(T... a)

当您说String时,可能无法识别Arrays.asList("TRUE", "T", "YES", "Y")类型。

你能试试吗?

String strArray[] = new String[]{"TRUE", "T", "YES", "Y"};
List strList = Arrays.asList(strArray);
List<String> TRUE_VALUES = Arrays.asList(strList );