Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 当一个map变量传递给不同实例的构造函数时,所有实例成员变量都会更新为map的最新值_Java - Fatal编程技术网

Java 当一个map变量传递给不同实例的构造函数时,所有实例成员变量都会更新为map的最新值

Java 当一个map变量传递给不同实例的构造函数时,所有实例成员变量都会更新为map的最新值,java,Java,主类-- 从上面的输出可以看出,两个实例变量都返回相同的更新值。'nt instance1是否应返回{key1=value1} 另外,如果这是预期的行为,那么可以采取什么措施来解决此问题。从代码中可以看出,您将相同的HashMap引用到instacne1和instance2对象,并且在getClassDetails方法中,将调用相同HashMap的tostring方法,因此输出是相同的,请使用以下代码片段: import java.util.*; public class Main {

主类--

从上面的输出可以看出,两个实例变量都返回相同的更新值。'nt instance1是否应返回{key1=value1}


另外,如果这是预期的行为,那么可以采取什么措施来解决此问题。

从代码中可以看出,您将相同的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());
    }
}