Java 当一个map变量传递给不同实例的构造函数时,所有实例成员变量都会更新为map的最新值
主类-- 从上面的输出可以看出,两个实例变量都返回相同的更新值。'nt instance1是否应返回{key1=value1}Java 当一个map变量传递给不同实例的构造函数时,所有实例成员变量都会更新为map的最新值,java,Java,主类-- 从上面的输出可以看出,两个实例变量都返回相同的更新值。'nt instance1是否应返回{key1=value1} 另外,如果这是预期的行为,那么可以采取什么措施来解决此问题。从代码中可以看出,您将相同的HashMap引用到instacne1和instance2对象,并且在getClassDetails方法中,将调用相同HashMap的tostring方法,因此输出是相同的,请使用以下代码片段: import java.util.*; public class Main {
另外,如果这是预期的行为,那么可以采取什么措施来解决此问题。从代码中可以看出,您将相同的HashMap引用到instacne1和instance2对象,并且在
getClassDetails
方法中,将调用相同HashMap的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());
}
}
import java.util.*;
公共班机{
私有静态ArrayList allInstances=new ArrayList();
公共静态void main(字符串[]args)
{
Map var=newhashmap();
认沽价值(“关键1”、“价值1”);
Class1实例1=新的Class1(var);
allInstances.add(instance1);
var=newhashmap();
认沽价值(“关键2”、“价值2”);
Class1实例2=新的Class1(var);
allInstances.add(instance2);
getInstances();
}
公共静态void getInstances(){
适用于(c类:所有装置)
System.out.println(c.getClassDetails());
}
}
输出与实际代码打印的不匹配(在修复代码后-您有一个额外的大括号,并且缺少导入)。从根本上说,问题在于两个Class1
实例都使用了对相同HashMap
的引用。如果你想让它们独立,它们应该有独立的映射对象。可能没有真正的理由创建var1
和var2
静态字段。可以只是main
@Thilo内部的局部变量:是的,这是真的,我只是编辑他的代码来工作,我会编辑答案现在它非常混乱。为什么你要重复使用同一个变量,而不是使用map1
和map2
?@Thilo:因为map的两个实例是冗余的,似乎map不是重点,而且如果他愿意,他可以通过引用来检索map。实际上我使用的是同一个变量,因为我没有在其他地方引用这个变量,所以为什么要使用额外的空间,我可能是错的,但这正是我所想的。使var1成为static是要遵循标准的指导方针,还是使用它更好?你能详细说明一下吗@使用您的解决方案(var=newhashmap();),我的问题得到了解决。
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}
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());
}
}