我有一个允许的自定义注释列表,我正在通过调用列表上的contains
方法来检查是否允许特定的注释。
这行得通,但是Sonar抱怨规则squid:S2175
。它说:
“列表<类>”不能包含“类”
可以使用错误类型的参数调用几个Collection方法,但是这样做是没有意义的,并且很可能是使用错误参数的结果。当List.contains或List.remove的参数类型与用于列表声明的类型无关时,此规则将引发问题。
我该如何解决?
这是一个最小的例子:
private boolean testClassContains(){
final List<Class<? extends Annotation>> annotations = Arrays.asList(MyAnnotation.class,YourAnnotation.class);
return annotations.contains(YourAnnotation.class);
}
答案 0 :(得分:2)
1)首先确保您使用的是新版本的SOnarQUbe / SonarJava插件
2)SonarQube是人们编写的软件,因此可能会出现错误。例如,类似的情况https://groups.google.com/forum/#!topic/sonarqube/qyOOOZORBNs 我建议您在他们的Jira中提出问题。
3)同时,只需抑制它即可。如果您有理由这样做,压制并不是邪恶的