我有一个允许的自定义注释列表,我试图通过调用列表中的contains
方法来检查是否允许特定的注释。这有效,但声纳抱怨规则squid:S2175
。它说:
“List <Class>”不能包含“Class”
可以使用不正确类型的参数调用一些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);
}
1)首先确保您使用的是新版SOnarQUbe / SonarJava插件
2)SonarQube是由人编写的软件,因此可能有错误。例如,类似的案例https://groups.google.com/forum/#!topic/sonarqube/qyOOOZORBNs我建议你在他们的Jira中提出问题。
3)同时,压制它。如果你有理由这么说,抑制并不邪恶