2010-02-17 2 views
1

У меня есть следующий фрагмент кода:java hashmap значения ушли после перефразирования?

private static HashMap<String, TestObject> labelHash= new HashMap<String, TestObject>(); 
    private static HashMap<String, TestObject> valueHash= new HashMap<String, TestObject>(); 

    private HashMap getChildrenInHash(int opt){ 
//  HashMap labelHash= new HashMap(); 
//  HashMap valueHash= new HashMap(); 

     if (valueHash.isEmpty() && labelHash.isEmpty()) {   

       if(getLabel().isShowing()){ 
        TestObject[] tempArray = getLabel().getMappableParent().getMappableChildren(); 
        for(int i =1; i < tempArray.length-2;i++){ 
         if(tempArray[i]==null) 
          break; 
         if(tempArray[i].getProperty("text").toString().compareTo(" ")==0){ 
          i+=1; 

         } 
         labelHash.put((String)tempArray[i].getProperty("text"),(tempArray[i])); 

         valueHash.put((String)tempArray[i].getProperty("text"),(tempArray[i+1])); 
         i+=2; 
       } 
       //System.out.println("finished filling the hashes");     
       } 
      }    

     } 

     if(opt ==1) 
      return labelHash; 
     else 
      return valueHash; 

    } 

Я использую этот метод в основном населяют первоначально HashMaps то в конечном итоге получить значения из него позже, но проблема в том, что значения то, что я вижу, получить заселены делает больше не существует для поиска (не для всех, но для некоторых)? так, что происходит ? как они теряются, я проверял с помощью отладчика и видел значения один за другим при вставке, но когда извлечения больше не существует, какие-то мысли?

+1

Как вы вызываете метод getChildrenInHash и как вы храните результат (HashMap), возвращенный методом? Можете ли вы добавить фрагмент кода, показывающий это? – sateesh

+0

здесь метод, который вызывает, что getChieldrenInHash(): общественного WLabel getFlashCopyTargetCapacityLabel() { \t \t HashMap labelHash = getChildrenInHash (1); \t \t вернуть новый WLabel ((TestObject) labelHash.get («Целевая емкость FlashCopy»)); \t} по какой-то причине я не могу отформатировать стиль кода, не обвиняю меня в этом. – Tiberiu

ответ

1

Вы делаете что-нибудь с этими TestObject s?

HashMap s (и коллекции в целом) хранят ссылку, а не новую копию их содержимого. Это нормально с неизменяемыми классами, такими как String, но с классами, не относящимися к неизменяемым, вы можете изменить содержимое этих объектов через исходную ссылку.

+0

да, в конце я выхожу из него, в зависимости от виджетов, это для автоматического тестирования пользовательского интерфейса. – Tiberiu

0

Используете ли вы разные ключи (всегда) при заполнении? Если вы всегда используете один и тот же ключ, вы найдете только последнее вставленное значение ...

+0

почти всегда одни и те же значения, однако иногда редко бывают разные (от одной среды выполнения до другой). – Tiberiu

Смежные вопросы