警告ArrayList是原始类型。泛型类型ArrayList的引用 应该参数化
为了保存一个由一个成员完成的付款的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
谁能解释我为什么?
回答:
:http :
//docs.oracle.com/javase/tutorial/java/generics/
许多Java类和类型(称为 泛型类 或 泛型类型 ),通常是集合,具有所谓的 类型参数 ,例如E
in
ArrayList<E>
(E
只是一个任意选择的名称,其他类将其命名为as T
或其他):
public class ArrayList<E> extends ... { public E get(int index) { ... }
public boolean add(E element) { ... }
// other methods...
}
现在,当您创建此类的实例时,您可以定义类型参数的具体值,例如String
(E
通常可以求值为所需的任何类型):
ArrayList<String> stringList = new ArrayList<String>();
从现在开始,所有的E
s的“改为”通过String
为stringList
可变的,所以你可以从它只是字符串添加到它,并获得唯一的字符串。编译器会检查您是否错误地添加了其他类型的对象:
stringList.add(Integer.valueOf(1));// compile error - cannot add Integer to ArrayList of Strings
但是,由于Java 5中已添加了泛型,因此仍可以在不使用泛型的情况下编写代码以实现向后兼容性。所以你可以这样写:
ArrayList list = new ArrayList();
但是您将失去所有类型检查的好处。E
方法签名中的Object
s 变成简单的s。
list.add(Integer.valueOf(42)); // adding an Integerlist.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
要使用的类型。
以上是 警告ArrayList是原始类型。泛型类型ArrayList的引用 应该参数化 的全部内容, 来源链接: utcz.com/qa/431651.html