【发布时间】:2020-03-19 06:27:31
【问题描述】:
主类--
package test;
import java.util.Map;
public class Client {
private static ArrayList<Class1> allInstances = new ArrayList<Class1>();
private static Map <String, String> var1 = new HashMap<String, String>();
public static void main(String[] args)
{
var1.put("key1","value1");
Class1 instance1 = new Class1(var1);
allInstances.add(instance1);
var1.put("key2","value2");
Class1 instance2 = new Class1(var1);
allInstances.add(instance2);
getInstances();
}
public static void getInstances() {
for(Class1 c: allInstances) {
System.out.println(c.getClassDetails());
}
}
Class Class1 --
package test
import java.util.Map;
public class Class1 {
private Map <String, String> classDetails;
public Class1(Map <String, String> classDetails) {
this.classDetails = classDetails;
}
public Map <String, String> getClassDetails(){
return this.classDetails;
}
}
输出--
{key2=value2}
{key2=value2}
从上面的输出中我们可以看到,两个实例变量都返回相同的更新值。不应该 instance1 返回 {key1=value1}
此外,如果这是预期的行为,可以采取什么措施来解决此问题。
【问题讨论】:
-
输出与您的实际代码打印的不匹配(修复代码后 - 您有一个额外的大括号并且您缺少导入)。从根本上说,问题在于您的两个
Class1实例都使用对相同HashMap的引用。如果你想让它们独立,它们应该有独立的地图对象。
标签: java