2011-06-15 34 views
1

所以我在前一天有一個關於如何在不創建單獨實例的情況下訪問具有兩個不同其他類的相同數據類的問題。有人建議使用單身,所以我做了一些研究,但沒有太多關於它的內容。Singleton類的調用給主類提供了空指針異常

我遇到的問題是,當我嘗試訪問數據單例時,我的主類獲得空指針異常。但是我的其他班級可以訪問它並獲取數據。這究竟有多可能?我有一個非常基本的設置...

public enum laneData { 
    INSTANCE; 
    private String laneID; 

    public String getLaneID() { 
     return laneID; 
    } 

    public void setLaneID(String laneID) { 
     this.laneID = laneID; 
    } 

} 

主級呼叫

private laneData laneData; 
public void init() { 
    laneData.setLaneID("test"); //these two lines each throw null pointer unless commented out 
    System.out.println(laneData.getLaneID()); 
    .... 

其他類

public class XMLParser { 
private LaneGUI laneGUI; 
private laneData laneData; 


public void parseInputString(String input){ 
laneData.setLaneID(getCharacterDataFromElement(line)); //both of these work fine 
System.out.println("stored ID: " + laneData.getLaneID()); 
+1

它已經有一段時間,因爲我用的Java。現在通常使用'enum'在Java中實現一個Singleton模式嗎?它聞起來像我改裝一個它最初不是爲了設計的構造。 – Santa 2011-06-15 18:55:18

+0

這是建議的方式現在@聖誕老人 – Marcelo 2011-06-15 19:06:30

回答

4

你需要private laneData laneData = laneData.INSTANCE;。您可以使用laneData.INSTANCE.getLaneID()

Java指南也推薦使用類名和枚舉名,大寫I.E. LaneData

+0

在主,其他類,或兩者?如果是這樣,爲什麼訪問只能在一個類中工作,而不能在另一個類中工作?我只是試了一下..它給出了一個錯誤,說明初始化程序中的自我引用 – JMD 2011-06-15 18:53:13

+0

在兩個。在你的第二種情況下,你可能在你的構造函數或其他地方初始化laneData實例變量。 – Marcelo 2011-06-15 18:55:16

+0

太棒了。 laneData.INSTANCE.getLaneID()工作完美。 – JMD 2011-06-15 19:05:39

2

有人建議使用一個單獨 ,所以我做了一些研究,但有 不是很多了。

有很多關於單身模式。

這是一個例子單(注意區別)

public class MySingleton { 
    private String label; 
    private static MySingleton single; 
    private MySingleton(String label) { 
     this.label = label; 
    } 

    public static MySingleton getInstance(String label) { 
     if (singleton == null) singleton = new MySingleton(label); 
     return singleton; 
    } 
} 
+1

這不是線程安全的,實際上建議像@Jesse那樣做。 – Marcelo 2011-06-15 18:56:31

+0

我的確讀過「體面」的信息量。你的例子是基於Java的老版本。顯然,用Java 6你可以枚舉類型,它具有相同的效果。除了空指針,我找不到任何關於它的東西。 – JMD 2011-06-15 18:57:05

+0

'同步'關鍵字救援? – Santa 2011-06-15 18:57:07