Java新手求助:误将数组当List创建,无法调用set()方法
问题根源与解决方案
嘿,我完全懂你这会儿的困扰!咱们先把问题拆明白:
你写的代码private creatureKind[] field = new creatureKind[7];创建的是一个Java数组,而不是List集合。数组和List是Java里两种完全不同的数据结构——数组没有set()方法,它的元素赋值是直接通过下标操作的(比如field[0] = new creatureKind();),这就是为什么你调用set()会报错说“field是数组类型而非List类型”。
下面给你两种解决思路,按需选择:
1. 直接创建List代替数组
如果你的需求本来就是要用List,那直接初始化一个List就好,推荐用ArrayList(最常用的List实现类):
import java.util.ArrayList; import java.util.List; // 直接创建初始容量为7的ArrayList,后续可动态扩容 private List<creatureKind> field = new ArrayList<>(7);
这样之后你就可以正常调用set()方法了,比如:
// 给索引0的位置设置元素 field.set(0, new creatureKind());
小贴士:
ArrayList<>(7)里的7是初始容量,不是固定长度,List会自动根据元素数量扩容,这也是它比数组灵活的地方。
2. 将现有数组转为List
如果你已经有了这个数组,想把它转成List来使用,可以用Arrays.asList()方法,但要注意它的特性:
import java.util.Arrays; import java.util.List; creatureKind[] fieldArray = new creatureKind[7]; // 转成List,但这个List是固定大小的,不能添加/删除元素 List<creatureKind> fieldList = Arrays.asList(fieldArray); fieldList.set(0, new creatureKind()); // 这个是可以正常调用的
如果需要一个可以自由添加/删除元素的List,就再包装一层ArrayList:
List<creatureKind> mutableFieldList = new ArrayList<>(Arrays.asList(fieldArray));
最后再啰嗦一句:数组适合固定长度、性能要求高的场景,List适合需要动态增删元素、使用集合API的场景,根据你的需求选就好啦!
内容的提问来源于stack exchange,提问作者eugene kim
相关产品推荐
相关产品推荐

