java - 当一个map变量传递给不同实例的构造函数时,所有实例的成员变量都会更新为map的最新值
问题描述
主课——
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());
}
}
类 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}
此外,如果这是预期的行为,可以采取什么措施来解决这个问题。
解决方案
从您的代码中可以看出,您将相同的 HashMap 引用到 instacne1 和 instance2 对象,并且在getClassDetails
方法tostring
中将调用相同哈希图的方法,因此输出相同,请使用以下代码片段:
import java.util.*;
public class Main {
private static ArrayList<Class1> allInstances = new ArrayList<Class1>();
public static void main(String[] args)
{
Map <String, String> var = new HashMap<String, String>();
var.put("key1","value1");
Class1 instance1 = new Class1(var);
allInstances.add(instance1);
var = new HashMap<String, String>();
var.put("key2","value2");
Class1 instance2 = new Class1(var);
allInstances.add(instance2);
getInstances();
}
public static void getInstances() {
for(Class1 c: allInstances)
System.out.println(c.getClassDetails());
}
}
推荐阅读
- typescript - 无处不在的错误:“无法调用类型缺少调用签名的表达式。类型'RaygunStatic'没有兼容的调用签名。”
- sql-server - 从 MS Access 到 MSSQL 的导入数据编码错误
- docker - Kubernetes (gke) 获取 pod 网络接口的名称
- json - 为组合字段值添加最小长度条件
- json - org.json.JSONObject 将数字变为指数形式
- oracle - Oracle 12.2 二进制 XML 和 SAX 解析器
- ios - 来自调试器的消息:由于信号 9 而终止
- reactjs - 循环遍历 React.js 中的状态对象
- c - 如何降低两个 for 循环的大 O 复杂度
- c++ - 在tensorflow中,是否有任何用于调整GPU内存大小的c ++函数或方法?