2011-09-26 73 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的地方停止。