栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

您绝对应该阅读有关Java泛型的本教程
: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 StringObject something = list.get(0); // unknown type of returned object, need to castInteger 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
要使用的类型。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/496559.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号