这个问题在这里已经有答案了:
什么是nullpointerexception,如何修复它(12个答案)
5天前关门了。
我试图访问arrays.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个)的列表并访问这些元素?
2条答案
按热度按时间tvmytwxo1#
在调用对象上的函数之前,总是在对象上添加null检查,以避免npe
例如。
0ejtzxu12#
为对象的字段请求null会引发异常
您建立了一个包含80个插槽的阵列,可以指向
Cell
物体。但你从来没有创造过Cell
物体。所以所有的80个插槽都没有指向任何东西,它们是null
.然后将该空数组添加到空数组中
ArrayList
. 还是没有Cell
物体存在,所以ArrayList
没有Cell
对象,仅为空。你创造了一个List
80个插槽,但所有插槽都为空(null)。然后,您要求从列表的第11个槽(索引为10)引用对象。有第十一个槽。但是在第十一个槽中没有对象引用。所以你从列表中检索到一个空值。
从这个空值你试图访问
value
中定义的字段Cell
. 但你没有Cell
手里的东西。你手里只有一个空的。空表示什么也没有。试图访问一个字段(或调用一个方法)在一个空值上(在空值上)是没有意义的。所以java抛出了一个NullPointerException
.要验证是否有对象引用而不是空引用,请执行以下操作:
使用EarlyAccessJava16定义一个记录,这是创建类的一种简化方法。
顺便说一句,
value
对于java中的字段来说是个糟糕的名称。我们一直用这个词作为程序员。讨论“价值的价值”会很混乱。