使用数组中的get()时使用java NPE。asList列表
我试图访问数组中的一个元素。asList-List,但我有一个NPE
主要类别:
public class Game {
List<Cell> cells = null;
public Game () {
cells = new ArrayList<>();
cells.addAll(Arrays.asList(new Cell[80])); //Target: Add 80 additional list elements
}
public int getSelectedValue () {
return cells.get(10).value; //Here I get the NPE, but I need the 10th cell
}
}
亚类细胞:
public class Cell {
int row;
int col;
int value;
}
如何使用get()操作符引用一个包含许多对象(需要100个)的列表,并访问这些元素
# 1 楼答案
要求对象的字段为null会引发异常
您建立了一个包含80个插槽的数组,这些插槽能够指向
Cell
对象。但您从未创建过任何Cell
对象。因此,所有80个插槽都没有指向任何内容,它们是null
然后将该空数组添加到一个空的
ArrayList
。仍然没有Cell
对象存在,因此ArrayList
没有Cell
对象,只有空值。您确实创建了一个包含80个插槽的List
,但所有插槽都是空的(null)然后,您要求从列表的第11个位置(索引为10)引用对象。还有第十一个位置。但是在第十一个槽中没有对象引用。所以你从列表中检索到一个空值
您试图从该空值访问
Cell
中定义的value
字段。但是你手头没有Cell
对象。你手里只有一个空的。空表示什么也没有。试图访问空值(空值)上的字段(或调用方法)毫无意义。所以Java抛出了一个NullPointerException
要验证手头是否有对象引用而不是空引用,请执行以下操作:
使用early access Java 16定义一条记录,这是创建类的一种简化方法
顺便说一下,
value
对于Java中的字段来说是个糟糕的名字。作为程序员,我们一直使用这个术语。讨论“价值的价值”会让人很困惑