2012-11-18 155 views
1

我來自很多JavaScript,所以請耐心等待。初始化空HashMap地圖

我有3個HashMaps,我在一個不同的類的方法中引用。我的代碼(很簡單)看起來像這樣:

public class MainClass { 
    private HashMap<String,Nation> randomHashMap = new HashMap<String,Nation>(); 
    DifferentClass d = new DifferentClass(this); 
} //with getters/setters 

public class DifferentClass { 
    private MainClass mc; 
    public void randomMethod() { 
     System.out.println("randomHashMap is " + (mc.getRandomHashMap() == null)); 
    } //returns null 
    public DifferentClass(MainClass c) { 
     this.mc = c; 
    } 
} 

然而,當我打電話給他們在我的另一種方法,它們是空。

如何創建一個新的空HashMap?

+3

請確保您在構造函數中初始化它們或在代碼中使用它們之前。 –

+1

爲了最好地理解問題,請展示您的代碼。 –

+1

您提供的代碼甚至不會編譯,除非您在'MainClass'中真的獲得了一個名爲'getRandomHashMap()'的靜態**方法。 –

回答

5

您需要初始化您的MainClass mc變量,然後在DifferentClass#randomMethod方法中使用它。此外,請確保您使用mc變量而不是MainClass.getRandomHashMap()方法(通過您的實際代碼,我們不知道它的行爲如何)。您的代碼如下所示:

public class DifferentClass { 

    private MainClass mc = new MainClass(); 

    public void randomMethod() { 
     //assuming getRandomHashMap is the getter of randomHashMap attribute (and non static) 
     System.out.println("randomHashMap is " + (mc.getRandomHashMap() == null)); 
    } 
} 

public class MainClass { 
    private HashMap<String,Nation> randomHashMap = new HashMap<String,Nation>(); 
    DifferentClass d = new DifferentClass(this); 

    public HashMap<String,Nation> getRandomHashMap() { 
     return this.randomHashMap; 
    } 
} //with getters/setters 
+0

當我在構造函數中傳遞參考時,我得到星星錯誤(堆棧溢出錯誤) – Polyov

+0

@SomekidwithHTML它取決於您的設計。如果你想使用MainClass的一個實例初始化DifferentClass屬性(如你的代碼所示),最好在MainClass構造函數中完成。 –

+0

我不明白這是一個解決方案。 OP的代碼清楚地在其構造函數中初始化了'mc'字段,並且構造函數從'MainClass'傳入了一個非空值。 –

0

您發佈的代碼實際上完全沒問題,只要字段初始化。我做了一個SSCCE從它以最小的干預:

class Nation{} 

public class MainClass { 
    private HashMap<String,Nation> randomHashMap = new HashMap<String,Nation>(); 
    DifferentClass d = new DifferentClass(this); 
    public Object getRandomHashMap() { 
    return randomHashMap; 
    } 
    public static void main(String[] args) { 
    new MainClass().d.randomMethod(); 
    } 
} //with getters/setters 

class DifferentClass { 
    private MainClass mc; 
    public void randomMethod() { 
     System.out.println("randomHashMap is " + (mc.getRandomHashMap() == null)); 
    } //returns null 
    public DifferentClass(MainClass c) { 
     this.mc = c; 
    } 
} 

和它打印

randomHashMap is false 

這證明randomHashMap確實非空。