Значение HashMap (объект) неправильно переопределено неправильным значением - PullRequest
0 голосов
/ 20 декабря 2018

Я перебираю хэш-карту, состоящую из строковых ключей и имеющую объекты в качестве значений, и я устанавливаю атрибуты объектов.Значение моего hashmap - это объект, который имеет другие объекты в качестве атрибутов.Проблема заключается в том, что как только я устанавливаю значение для первого объекта с помощью ключа "1-1", во второй итерации, когда я хочу установить значение для моего второго ключа "2-1", значение, соответствующее первой записи,было назначено непосредственно перед тем, как переопределено значением второй записи, другими словами, значение атрибута первой записи переопределено значением атрибута, соответствующим второй записи.Точнее говоря, для ключа "1-1" на первой итерации моего хэш-карты, когда я печатаю methodtraceHashMap2.get ("1-1"). Method.Owner.getDeveloperGold (), я получаю значение "T", затем каккак только я перехожу ко второму ключу со значением «2-1», я получаю другое значение при перепечатке methodtraceHashMap2.get («1-1»). Method.Owner.getDeveloperGold (), а именно«N», хотя в действительности это должно быть «T», «N», которое я получаю, на самом деле соответствует значению methodtraceHashMap2.get («2-1»). Method.Owner.getDeveloperGold (), который был установлен длявторая запись моего hashmap с ключом "2-1"

for(MethodTrace MethodTrace: methodtraceHashMap2.values()) {

        String reqClass=MethodTrace.Requirement.ID+"-"+MethodTrace.Method.Owner.ID;  

        MethodTrace.Method.Owner.DeveloperGold=classTraceHashMap.get(reqClass).DeveloperGold; 
        System.out.println("yes");
    }
    System.out.println(methodtraceHashMap2.get("1-1").Method.Owner.getDeveloperGold());

Вот фрагмент, который заполняет карту, но проблема возникает в предыдущем фрагменте, когда я заполняю атрибут MethodTrace.Method.Owner.DeveloperGold из MethodTrace, я не верю, что проблема связана с фрагментом ниже

ResultSet myresults = st.executeQuery("SELECT traces.* from traces");

    while (myresults.next()) {
        MethodTrace MethodTrace = new MethodTrace();
        Method method= new Method(); 
        Requirement requirement= new Requirement(); 
         requirement=RequirementHashMap.get(myresults.getString("requirementid")); 
         method = MethodHashMap.get(myresults.getString("methodid")); 

        MethodTrace.setMethod(method);
        MethodTrace.setRequirement(requirement);

        //checking whether the method is present in the superclasses


        MethodTrace.setGold(myresults.getString("goldfinal"));
        String reqMethod=MethodTrace.Requirement.ID+"-"+MethodTrace.Method.ID; 
        String reqClass=MethodTrace.Requirement.ID+"-"+MethodTrace.Method.Owner.ID;             
MethodTrace.Method.Owner.DeveloperGold=classTraceHashMap.get(reqClass).DeveloperGold; 

         System.out.println(reqMethod+"-");
         System.out.println(MethodTrace.Method.Owner.DeveloperGold);

         methodtraceHashMap2.putIfAbsent(reqMethod, MethodTrace);
        System.out.println("WE ARW IN THE LOOP "+methodtraceHashMap2.get("1-1"));
        methodtraceHashMap2.putIfAbsent(reqMethod+"_"+System.currentTimeMillis(), MethodTrace);
        System.out.println("WE ARW IN THE LOOP "+methodtraceHashMap2.get("1-1"));
    }
...