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

Java数组是同构的,但ArrayList不是,这意味着什么?

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

Java数组是同构的,但ArrayList不是,这意味着什么?

数组对添加的元素的类型进行运行时检查。也就是说,如果添加了一个不同类型的新元素,则

ArrayStoreException
在运行时将引发。这就是为什么它们被认为是“本地的”。

对于

ArrayList
s(
List
通常是s)而言,情况并非如此。由于在运行时进行类型擦除,因此它实际上可以容纳任何对象。

运行时,以下内容引发异常:

Object[] array = new String[3];array[0] = "a";array[1] = 1;   // throws java.lang.ArrayStoreException

不同于以下内容,它们可以毫无问题地进行编译和运行(尽管带有编译器警告,因为它未正确使用泛型):

ArrayList list = new ArrayList<String>();list.add("a");list.add(1);    // OKlist.add(new Object());  // OK

通过正确使用泛型,即在

list
type之上声明变量
ArrayList<String>
而不是
ArrayList
,可以在编译时避免该问题:

ArrayList<String> list = new ArrayList<String>();list.add("a");list.add(1);  // compilation errorlist.add(new Object());  // compilation error

但是,即使有了一个通用声明的列表,您也可以在运行时毫无例外地进行以下工作:

ArrayList<String> list = new ArrayList<String>();list.add("a");Method[] methods = List.class.getMethods();for(Method m : methods) {    if(m.getName().equals("add")) {        m.invoke(list, 1);        break;    }}System.out.println(list.get(0));System.out.println((Object) list.get(1));

输出:

一个

1个



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

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

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