【问题标题】:Eclipse warning - Class is a raw type. References to generic type Class<T> should be parameterizedEclipse 警告 - 类是原始类型。对泛型 Class<T> 的引用应该被参数化
【发布时间】:2012-08-06 18:33:40
【问题描述】:
import java.util.ArrayList;

public class ListOfClasses
{

    private ArrayList<Class> classes;

    public ArrayList<Class> getClasses() 
    {
        return classes;
    }

    public void setClasses(ArrayList<Class> classes) 
    {
        this.classes = classes;
    }
}

为此,我在 eclipse 中收到以下警告 -

类是原始类型。对泛型类的引用应该是 参数化

这是在earlier question 中提出的,但答案是特定于 Spring 框架的。但是即使与 Spring 没有任何关系,我也会收到此警告。那么问题出在哪里?

【问题讨论】:

  • 类型必须是ArrayList吗?

标签: java generics


【解决方案1】:

我怀疑它抱怨 Class 是原始类型。你可以试试

private List<Class<?>> classes;

或取消此特定警告。

在这种情况下,我会忽略警告。我也会考虑使用防御副本。

private final List<Class> classes = new ArrayList<>();

public List<Class> getClasses() {
    return classes;
}

public void setClasses(List<Class> classes) {
    this.classes.clear();
    this.classes.addAll(classes);
}

【讨论】:

    【解决方案2】:

    问题是你不能说返回类的类型。这个警告不是很有用。由于您不知道它是哪种类型的类,因此您无法向其添加类型参数。如果你这样做:

    public  Class<? extends Object> getClasses {}
    

    你不会让它变得更好,因为 Java 中的所有东西都扩展了 Object,除了原语。我忽略了这些提示,或者将它们关闭。

    【讨论】:

      【解决方案3】:

      试试

      public class ListOfClasses
      {
      
          private ArrayList<Class<?>> classes;
      
          public ArrayList<Class<?>> getClasses() 
          {
              return classes;
          }
      
          public void setClasses(ArrayList<Class<?>> classes) 
          {
              this.classes = classes;
          }
      }
      

      类也是一个参数化类型,如果你没有声明一个类型参数,那么你会在需要参数化类型的地方使用原始类型时收到警告。

      【讨论】:

        猜你喜欢
        • 2016-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多