2011-09-26 5 views
0

私はactionTable.get(state)に配列を持っています。 アレイに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); 

NullPointerException最後の印刷ステートメントで発生します。 .prod部分が定義されていますが、元のprodオブジェクトに定義済みの頭部があったとしても、.prod.headはヌルです。

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

} 

コンストラクタ内の割り当てのRHSの全ての定義されています: これは、削減のためのコンストラクタです。だから、私はなぜ、新しいReduceがアクセスできるprodオブジェクト内のheadフィールドがactionTableを通してアクセスするときに定義されていないのか理解していません。

答えて

0

信頼の継承とすべて。配列の可能性が高いのは、異なる配列インスタンスが関与しているということです(配列参照を拡大/コピーする場合)。いくつかのSystem.out.printlnがそれを助けます。

0

まずは、まずIDEでブレークポイントビューを取得し、「例外がスローされたら停止」をチェックし、おそらくNullPointerExceptionという名前を付けます。 その後、デバッガでコードを実行すると、NullPointerExceptionがスローされた箇所でコードが正確に停止します。

関連する問題