我读了这篇文章:java 中 Arrays.asList(array) 与 new ArrayList(Arrays.asList(ia)) 之间的区别
我对此有一个疑问。
我看看这一行:
List<Integer> list2 = Arrays.asList(ia)
仍然有一句话说:
当然,包装器上不允许某些列表操作,例如
从列表中添加或删除元素,您只能读取或
覆盖元素。
如果list2有List接口的引用,我希望它能实现Java中List接口中包含的所有方法。https://docs.oracle.com/javase/7/docs/api/java/util/List.html.
添加(int索引,E元素)
and
删除(整数索引)
在List接口中显示,那么list2中怎么可能没有实现呢?
我本以为list2
is a List;因此我可以打电话all属于List接口的方法?!那么为什么调用时会抛出异常add()
or remove()
?
这里有一个微妙的细节可能很容易被忽视:
The Arrays.asList()javadoc 简要提到:
返回由指定数组支持的固定大小列表。
换句话说:是的,您收到的内容是“我是一个列表”;但事实上,底层实现为您提供了我们称之为结构上不可变列表对象。因此,所有会改变的方法结构该特定列表的...被“禁用”(通过在调用时抛出异常)。您仍然可以致电set()
尽管change该列表中的元素。
长话短说:purpose该方法的not为您提供一个完全支持列表的对象。该方法的目的是让您快速创建一个fixed对象的“列表”。
还有更多个人观点:我同意,这实际上并不“一致”。我本以为要么完全不可变的将返回列表;而不是一些“半生不熟”“结构上一成不变”的东西。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)