//即使第一次在addMap方法中初始化,sampleMap始终为null

公共课程样本{

private static HashMap<Long, Long> sampleMap;

public Sample() {
    addToMap(sampleMap, 100L, 100L);
    addToMap(sampleMap, 200L, 200L);
    addToMap(sampleMap, 300L, 300L);
    addToMap(sampleMap, 400L, 400L);
}

public HashMap<Long, Long> getSampleMap() {
    return sampleMap;
}

private void addToMap(HashMap<Long, Long> map, Long key, Long value) {
    if (map == null) {
        map = new HashMap<Long, Long>();
    }
    map.put(key, value);
}

public static void main(String[] args) {
    Sample obj = new Sample();
    obj.getSampleMap();
}


}

最佳答案

addToMap创建一个HashMap实例,并将其分配给局部变量。它不会更改sampleMap静态变量的值。

Java是一种按值传递语言。因此,当您将变量传递给方法时,该方法无法更改该变量的值。如果方法为变量分配了新值,则此分配是方法的局部值,并且不会更改传递给方法的原始变量的值。

您有几种选择。这里是其中的一些 :

在声明时初始化sampleMap

private static HashMap<Long, Long> sampleMap = new HashMap<Long, Long>();


或在第一次调用sampleMap之前初始化addToMap

public Sample() {
    sampleMap = new HashMap<Long, Long>();
    addToMap(sampleMap, 100L, 100L);
    addToMap(sampleMap, 200L, 200L);
    addToMap(sampleMap, 300L, 300L);
    addToMap(sampleMap, 400L, 400L);
}


或不要将sampleMap传递给addToMapaddToMap可以直接访问它:

private void addToMap(Long key, Long value) {
    if (sampleMap == null) {
        sampleMap = new HashMap<Long, Long>();
    }
    sampleMap.put(key, value);
}


最后一件事。实例方法返回静态成员几乎没有意义。将getSampleMap()设为静态,或将sampleMap设为实例变量(即非静态)。 addToMap()也是如此。

08-04 06:08