Ali*_*ahi 11 java generics return sonarqube
private List gridModel;
public List getGridModel() {
return gridModel;
}
Run Code Online (Sandbox Code Playgroud)
Eclipse显示警告:
列表是原始类型.应参数化对泛型类型List的引用.
将代码更改为以下将删除警告
private List<?> gridModel;
public List<?> getGridModel() {
return gridModel;
}
Run Code Online (Sandbox Code Playgroud)
但是,上面的代码显示了SonarQube中的一个主要陷阱错误:
删除通用通配符类型的使用.通用通配符类型不应在返回参数中使用
那么我该如何修复此警告呢?
我在这里看到一个类似的问题,但找不到解决方案.
使用Class<? extends Object>没有删除声纳警告.
那么我该如何修复此警告呢?
您可以为您的类使用类型参数:
public class GridModelHolder<T> {
private List<T> gridModel;
public List<T> getGridModel() {
return gridModel;
}
}
Run Code Online (Sandbox Code Playgroud)
然后,客户端代码可以决定什么类型的List GridModelHolder保留:
GridModelHolder<String> gridModelHolder = new GridModelHolder<String>(new ArrayList<String>);
但是,如果您坚持使用原始类型,则可以禁止显示警告,也可以只使用对象列表(建议不要使用这些类型)
@SuppressWarnings("unchecked")
public class GridModelHolder {
private List gridModel;
public List getGridModel() {
return gridModel;
}
}
Run Code Online (Sandbox Code Playgroud)
要么
public class GridModelHolder {
private List<Object> gridModel;
public List<Object> getGridModel() {
return gridModel;
}
}
Run Code Online (Sandbox Code Playgroud)
使该类具有通用性.将该泛型应用于List.此外,警告有效(没有泛型的集合类型是原始类型).就像是,
class MyClass<T> {
private List<T> gridModel;
public List<T> getGridModel() {
return gridModel;
}
}
Run Code Online (Sandbox Code Playgroud)
如果你真的想要禁用类型检查,那么就使用List泛型Object(这是原始类型)
private List<Object> gridModel;
public List<Object> getGridModel() {
return gridModel;
}
Run Code Online (Sandbox Code Playgroud)