声纳显示我有这个错误
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将此标记为错误?
答案 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 );