Java nullPointerException,包含对象上的getter和setter

时间:2012-11-11 04:43:33

标签: java nullpointerexception

我在下面得到一个nullPointerException。有人可以解释原因吗?谢谢!

private SpatialPooler spatialPooler;
private Region        region;
private Column        column33;


public void setUp()
{
    this.spatialPooler = new SpatialPooler();

    this.region = new Region(30, 40, 6, 8, 1.0f, 1, 1);

    this.column33 = this.region.getColumn(3, 3);
}

public void addActiveColumn(Column activeColumn)
{
    this.activeColumns.add(activeColumn); // nullPointerException here!
}

public Column getActiveColumn(int x, int y)
{
    for (Column activeColumn : this.activeColumns)
    {
        if (activeColumn.getX() == x && activeColumn.getY() == y)
        {
            return activeColumn;
        }
    }
    return null;
}

// in a test class that is in the same package.
public void testGetAndAddActiveColumn()
{
    this.spatialPooler.addActiveColumn(this.column33);
    assertNull(this.spatialPooler.getActiveColumn(3, 3));

    this.column33.setActiveState(true);
    assertEquals(this.column33, this.spatialPooler.getActiveColumn(3, 3));
}

2 个答案:

答案 0 :(得分:1)

您的代码未在任何地方显示activeColumns被初始化。

如果它是 Column 对象的列表,您应该将此代码放在某处:

List<Column> activeColumns = new ArrayList<Column>();

您可以将它放在构造函数中,或者在声明activeColumns时使用上面的代码

答案 1 :(得分:0)

NullPointerException s主要是因为您使用的是未初始化的变量。我假设activeColumns尚未初始化。它不是成员,所以它不会在该函数内部具有范围。您可以通过几种方式修复它

1)一个局部变量

2)将activeColumns添加为成员

3)改变函数的行为