2012-12-12 55 views
-2

我試圖創建一個XML元素對象,並指定施工過程中的某些屬性,但我不斷收到一個NullPointerException拋出,用下面的代碼:NullPointerException異常拋出試圖複製地圖

public XML.Element newElement(String name, Map<String, String> attributes) { 
    return new ElementImpl(name, attributes); 
} 

調用

public class ElementImpl implements XML.Element { 
    private Map<String, String> attributes = new LinkedHashMap<String, String>(); 

    public ElementImpl(String name, Map<String, String> attributes) { 
    ... 
    this.attributes.putAll(attributes); 
    } 

使用調試器進行調試時,它顯示「this」爲空。任何人都可以解釋我要去哪裏錯了嗎?

+2

'this' being'null'聽起來不太可能。你能製作一個有這個問題的小型完整例子嗎? – NPE

+0

是你分配參數(屬性)到你的實例變量(屬性)? – PermGenError

+5

你做錯了什麼是你沒有讀取堆棧跟蹤。 Blah上的空指針異常(Blah.java:1234)'這裏1234是行號。 – ignis

回答

0

我會建議您刪除putAll方法,而是分配變量。這是構造函數,所以這是您第一次將數據放在這個實例上。

另外,你確定在創建LinkedList時沒有任何錯誤嗎?至少我在Java中知道的類只能使用一個參數,並添加兩個參數。

public class ElementImpl implements XML.Element { 
    private Map<String, String> attributes; 

    public ElementImpl(String name, Map<String, String> attributes) { 
    this.attributes = attributes; 
    } 
} 

改爲寫。我認爲它會起作用。

如果下面的評論是寫的,那麼你可以試試這個。

this.attributes = new LinkedHashMap(attributes); 

這樣你會得到你的副本。

+0

這樣,對原始地圖的所有更改都會反映在此地圖上,因爲它們都引用同一個對象。我非常確定OP不會有這種行爲,這就是他試圖創建地圖的真實副本的原因。 – jlordo

+0

這個伎倆,非常感謝!並感謝所有人的建議。 – MeanwhileInHell

相關問題