我在actionTable.get(state)有一个数组。 当我向数组添加一个onject,即Reduce时,reduce的属性似乎不适合它。 该数组的类型为Action [],其中Action是Reduce的超类,这可能是原因吗?
将reduce添加到数组中:
actionTable.get(state)[t] = new Reduce(st.items.get(item).prod);
在添加之前检查字段头是否已定义:
System.out.println(Prod.prods.get(st.items.get(item).prod).head);
检查新添加的reduce是否具有正确的head字段:
System.out.println(actionTable.get(state)[t].prod.head);
最后一个print语句出现NullPointerException
。 .prod
部分已定义,但.prod.head
为空,即使原始prod
对象具有已定义的头部。
这是Reduce的构造函数:
Reduce(int pr) {
p = pr;
length = Prod.prods.get(pr).length;
prod = Prod.prods.get(pr);
}
定义了构造函数中赋值的所有RHS。所以,我不明白为什么当你通过actionTable访问它时,没有定义新Reduce有权访问的prod对象中的head字段。
答案 0 :(得分:0)
信任继承和所有。最有可能使用数组的是,涉及不同的数组实例(如果放大/复制数组引用)。一些更多的System.out.println将帮助那里。
答案 1 :(得分:0)
你应该做的第一件事是:在你的IDE中找到你的断点视图,检查“停止抛出异常”并且可能给出名称NullPointerException。 然后在调试器中运行代码,它将完全停止在抛出NullPointerException的位置。