Eclipse和SonarQube中的Java通配符通用返回警告 [英] Java wildcard generic as return warning in Eclipse and SonarQube

查看:2299
本文介绍了Eclipse和SonarQube中的Java通配符通用返回警告的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

 私人列表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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆