簡體   English   中英

非常具體的Java構造函數和Object類問題

[英]very specific java constructors and Object class problem

我在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);

NullPointerException發生在最后一個打印語句上。 即使原始prod對象具有已定義的head,也已定義了.prod部分,但.prod.head為null。 這是Reduce的構造函數:

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

}

定義了構造函數中所有分配的RHS。 因此,我不理解為什么當您通過actionTable訪問新的Reduce可以訪問的prod對象中的head字段未定義時。

信任繼承和所有。 數組最有可能涉及不同的數組實例(如果您放大/復制數組引用)。 還有一些System.out.println可以幫助您。

您始終應該做的第一件事是:在IDE中進入斷點視圖,選中“在拋出異常時停止”,並可能命名為NullPointerException。 然后在調試器中運行您的代碼,它將完全在引發NullPointerException的位置停止。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM