2011-01-30 62 views
0

我遇到了內部類的問題。我用一個代表狀態的內部類來建立一個對象(比方說一列火車)(假設列車停靠)。在java中拋出內部對象 - 未經檢查的異常

我試圖運行此代碼:

private void CustomObjectBuilder (String [] origin) { 

    final int array_dim = origin.length; 

    InnerCustomObject[] tmp_bin = new InnerCustomObject[array_dim]; 

    for (int ii = 0; ii < array_dim; ii++) { 

    String debug = extractData(origin[ii]); 


    tmp_bin[ii].setData(debug); 



    } 




} 

它編譯只是得很好,但在運行時我得到一個空對象異常。

我在做什麼錯?

在這裏,您可以FINDE原代碼:

public class CustomObject { 



    InnerCustomObject [] stops; 

    public class InnerCustomObject { 

     String name, station, schedTime, depTime, schedRail, depRail; 

     public void setData (String origin) { 

      this.station = origin; 
     } 

    } 
} 

編輯:我通過調用

CustomObject.InnerCustomObject ico = new CustomObject(). new InnerCustomObject(); 

爲什麼需要這麼詳細的解決了嗎?

回答

2

那麼,我注意到的最直接的事情是你在聲明它之後不要用任何對象填充tmp_bin[]。當你第一次創建一個數組時,它所包含的全部是null s。

所以,當你在你的循環做到這一點:

tmp_bin[ii].setData(debug); 

沒有什麼可以調用setData()上,導致例外。

重新編輯:你可以做

InnerCustomObject ico = this.new InnerCustomObject(); 

因爲你是你的外CustomObject類的CustomObjectBuilder()實例方法內創建它們。

+0

我認爲,但如果我添加tmp_bin [ii] = new InnerCustomObject();它不編譯...我該如何解決這個問題? – Mascarpone 2011-01-30 17:48:43

1
InnerCustomObject[] tmp_bin = new InnerCustomObject[array_dim]; 

聲明array_dim元素的數組,但都是null。那麼這

tmp_bin[ii].setData(debug); 

將無法​​正常工作。

只有對象爲null(= NPE)時,內部類纔會出現問題,因此您無法調用方法setData()。

1

在你的循環中,你必須創建InnerCustomObject的新實例。通過新的InnerCustomObject [size],你不會創建新的實例。