gpt4 book ai didi

java - Arrays.asList 的返回类型是什么?

转载 作者:行者123 更新时间:2023-11-29 04:30:22 27 4
gpt4 key购买 nike

我读了这篇文章: Difference between Arrays.asList(array) vs new ArrayList<Integer>(Arrays.asList(ia)) in java

我对此有疑问。我看行:

List<Integer> list2 = Arrays.asList(ia)

还有一行说:

Of course, some List operations aren't allowed on the wrapper, like adding or removing elements from the list, you can only read or overwrite the elements.

如果 list2 引用了 List 接口(interface),我希望它能实现 Java 中 List 接口(interface)中包含的所有方法。 https://docs.oracle.com/javase/7/docs/api/java/util/List.html .

add(int index, E element)

remove(int index)

显示在List接口(interface)中,那怎么可能没有在list2中实现呢?

我原以为 list2 是一个 List;因此我可以调用属于 List 接口(interface)的所有方法?!那么为什么在调用 add()remove() 时会抛出异常呢?

最佳答案

这里有一个很容易被忽略的微妙细节:

Arrays.asList() javadoc 简要提到:

Returns a fixed-size list backed by the specified array.

换句话说:是的,你收到了一个写着“我是一个列表”的东西;但实际上,底层实现为您提供了我们称之为结构不可变列表对象的东西。因此,所有会更改该特定列表的结构 的方法...都被“禁用”(通过在调用时抛出异常)。您仍然可以调用 set()更改该列表中的元素。

长话短说:此方法的目的不是为您提供完全支持列表的对象。此方法的目的是让您快速创建对象的固定“列表”。

更多的是个人观点:我同意,这其实是不“一致”的。我本以为会返回一个完全不可变 列表;而不是一些“半生不熟”的“结构不可变”。

关于java - Arrays.asList 的返回类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44018730/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com