当前位置: 首页 > 面试题库 >

警告ArrayList是原始类型。泛型类型ArrayList的引用 应该参数化

徐绪
2023-03-14
问题内容

为了保存一个由一个成员完成的付款的ArrayList,我想将“付款列表ID”更改为一个字符串,因此我创建了以下方法:

public String fromArraytoString(ArrayList items){
       JSONObject json = new JSONObject();
        json.put("uniqueArrays", new JSONArray(items));
        return json.toString();
           }

但是我收到以下警告:

   ArrayList is a raw type. References to generic type ArrayList<E> should be parameterized

谁能解释我为什么?


问题答案:

您绝对应该阅读有关Java泛型的本教程
:http :
//docs.oracle.com/javase/tutorial/java/generics/

简而言之:

许多Java类和类型(称为 泛型类泛型类型 ),通常是集合,具有所谓的 类型参数 ,例如Ein
ArrayList<E>E只是一个任意选择的名称,其他类将其命名为as T或其他):

public class ArrayList<E> extends ... {

    public E get(int index) { ... }

    public boolean add(E element) { ... }

    // other methods...
}

现在,当您创建此类的实例时,您可以定义类型参数的具体值,例如StringE通常可以求值为所需的任何类型):

ArrayList<String> stringList = new ArrayList<String>();

从现在开始,所有的Es的“改为”通过StringstringList可变的,所以你可以从它只是字符串添加到它,并获得唯一的字符串。编译器会检查您是否错误地添加了其他类型的对象:

stringList.add(Integer.valueOf(1));
// compile error - cannot add Integer to ArrayList of Strings

但是,由于Java 5中已添加了泛型,因此仍可以在不使用泛型的情况下编写代码以实现向后兼容性。所以你可以这样写:

ArrayList list = new ArrayList();

但是您将失去所有类型检查的好处。E方法签名中的Objects 变成简单的s。

list.add(Integer.valueOf(42)); // adding an Integer
list.add("aaa"); // adding a String

Object something = list.get(0); // unknown type of returned object, need to cast
Integer i0 = (Integer) something; // this unsafe cast works...
Integer i1 = (Integer) list.get(1); // but this fails with a ClassCastException
// because you cannot cast a String to Integer

使用 原始类型(即省略了类型参数的泛型类型)是不安全的事实,这是发出警告的原因。而不是仅ArrayList使用ArrayList<String>ArrayList<Integer>或您所items要使用的类型。



 类似资料:
  • 问题内容: 我有以下课程(来自简单的Spring教程) 其中Validator类是Spring 2.5中的类。 如果我尝试向其中添加参数,则supports方法显示警告(Class是原始类型。对泛型类型Class的引用应进行参数化) 我收到以下错误: 关于这种类型的问题有很多线索,但是我想获得一个完整的答案并真正理解它,而不会用“隐藏”这个问题! 问题答案: 接口使用原始类型声明该方法。在这种情况

  • 问题内容: 我有一个笼子课: 我试图在另一个类main方法中实例化Cage对象: 我收到错误:笼子是原始类型。泛型Cage的引用应参数化。我尝试了几个想法,但对这种棘手的语法感到困惑:o( 问题答案: 是通用类型,因此您需要指定一个类型参数,例如这样(假设有一个): 您可以使用任何扩展的类型(甚至是自身)。 如果省略type参数,那么在这种情况下最终得到的是。但是,即使这是您想要的,您仍应明确声明

  • 问题内容: 我之前在程序中有这些确切的代码行,但没有收到此错误。我做了一些搜索,发现的结果使我有些头疼。有任何想法吗? 错误是: 问题答案: 您可以使用: 发生这种情况是因为现在是泛型类。

  • 问题内容: Eclipse在正在运行的项目中仅使用以下代码(在其中仅包含伪类和main方法)给我警告(标题中): 最后一行触发警告。我不确定我在这里做错了什么,或者实际上我在做什么。我是一名Java学生,正在研究一个可疑的教程,并且试图理解泛型。假设变量x不能说明类型安全性。我尝试将其强制转换为对象类型(我认为它没有任何作用,因为它已经存在了),并且不起作用。 我如何解决此警告? 问题答案: 您声

  • 我读了很多文章,但我不明白这两行之间的区别: 我看到的唯一区别是第一行触发了“未检查的分配”警告。

  • 问题内容: 在常规数组列表初始化中,我们习惯于如下定义泛型类型, 但是,如果是ArrayLists的ArrayList,我们如何定义其通用类型? 数组列表的数组列表代码如下: 只需共享语法,如果有人对此有想法。 问题答案: 你可以做 如果您需要一个列表数组,可以执行 并安全地忽略或禁止该警告。