2011-09-26 74 views
0

我有一个数组在actionTable.get(状态)。 当我去添加一个onject的数组,即Reduce时,reduce的属性似乎并不符合它。 该数组的类型是Action [],其中Action是Reduce的超类,这可能是原因吗?非常具体的java构造函数和对象类问题

添加降低到阵列:

actionTable.get(state)[t] = new Reduce(st.items.get(item).prod); 

检查以查看是否字段头添加它之前定义:

System.out.println(Prod.prods.get(st.items.get(item).prod).head); 

检查,以查看是否新添加的减少具有正确的头字段:

System.out.println(actionTable.get(state)[t].prod.head); 

A NullPointerException发生在最后的打印语句上。 .prod部分已定义,但.prod.head为空,即使原始prod对象具有已定义的头部。 这是降低的构造:

Reduce(int pr) { 
    p = pr; 
    length = Prod.prods.get(pr).length; 
    prod = Prod.prods.get(pr); 

} 

所有在构造函数中分配的RHS的定义。所以,我不明白为什么当你通过actionTable访问它时,在新的Reduce访问的prod对象内的头域没有被定义。

回答

0

信任继承和所有。数组最有可能是,涉及不同的数组实例(如果放大/复制数组引用)。一些更多的System.out.println将在那里帮助。

0

你总是应该做的第一件事是:在你的IDE中进入你的断点视图,检查“在抛出异常时停止”,或者给出名称NullPointerException。 然后在调试器中运行你的代码,它会在引发NullPointerException的地方停止。