//即使首次在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();
}
}
答案 0 :(得分:2)
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
传递给addToMap
。 addToMap
可以直接访问它:
private void addToMap(Long key, Long value) {
if (sampleMap == null) {
sampleMap = new HashMap<Long, Long>();
}
sampleMap.put(key, value);
}
最后一件事。实例方法返回静态成员没有多大意义。要么使getSampleMap()
为静态,要么使sampleMap
为实例变量(即非静态)。这与addToMap()
相关。
答案 1 :(得分:1)
Java总是pass-by-value
。您无法在方法内重新分配引用。
话虽如此,没有必要将map
传递给adMap
方法。只需直接使用static
sampleMap
:
private void addToMap(Long key, Long value) {
if (sampleMap== null) {
sampleMap= new HashMap<Long, Long>();
}
sampleMap.put(key, value);
}
然后你可以改变你的建构者:
public Sample() {
addToMap(100L, 100L);
addToMap(200L, 200L);
addToMap(300L, 300L);
addToMap(400L, 400L);
}