Eclipse和SonarQube中的Java通配符通用返回警告 [英] Java wildcard generic as return warning in Eclipse and SonarQube
问题描述
私人列表gridModel;
public List getGridModel(){
return gridModel;
}
Eclipse显示警告:
列表是一种原始类型。
将代码更改为下面的代码将删除警告
私人列表<?> gridModel;
public List<?> getGridModel(){
return gridModel;
然而,上面的代码显示了SonarQube中的一个重大陷阱错误, p>
移除通用通配符类型的用法。通用通配符类型不应用于返回参数中
那么,如何解决此警告?
我看到类似的问题在这里,但无法找到解决方案。
使用 Class <?扩展对象>
没有删除Sonar警告。
我可以修复这个警告吗?
您可以为您的类使用类型参数:
public class GridModelHolder< T> {
私人列表< T> gridModel;
public List< T> getGridModel(){
return gridModel;
}
}
客户端代码可以决定什么类型的 List
GridModelHolder
拥有:
GridModelHolder< ;字符串> gridModelHolder = new GridModelHolder< String>(new ArrayList< String>);
然而,如果你坚持使用原始类型,禁止警告或简单地使用对象列表(这两者都不推荐)
@SuppressWarnings(unchecked)
public class GridModelHolder {
private List gridModel;
public List getGridModel(){
return gridModel;
或
public class GridModelHolder {
private List< Object> gridModel;
public List< Object> getGridModel(){
return gridModel;
}
}
private List gridModel;
public List getGridModel() {
return gridModel;
}
Eclipse shows a warning:
List is a raw type. References to generic type List should be parameterized.
Changing the code to below will remove the warning
private List<?> gridModel;
public List<?> getGridModel() {
return gridModel;
}
However the above code shows a Major pitfall error in SonarQube which says:
Remove usage of generic wildcard type. Generic wildcard types should not be used in return parameters
So how can I fix this warning?
I see a similar question here but could not find the solution .
Using Class<? extends Object>
did not remove Sonar warning.
So how can I fix this warning ?
You can use a type parameter for your class :
public class GridModelHolder<T> {
private List<T> gridModel;
public List<T> getGridModel() {
return gridModel;
}
}
The client code can then decide what type of List
GridModelHolder
holds :
GridModelHolder<String> gridModelHolder = new GridModelHolder<String>(new ArrayList<String>);
However, if you insist on using raw types, you can either suppress the warnings or simply have a List of objects (Neither of these are recommended)
@SuppressWarnings("unchecked")
public class GridModelHolder {
private List gridModel;
public List getGridModel() {
return gridModel;
}
}
OR
public class GridModelHolder {
private List<Object> gridModel;
public List<Object> getGridModel() {
return gridModel;
}
}
这篇关于Eclipse和SonarQube中的Java通配符通用返回警告的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!