| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > HashMap - не понятное поведение |
| Автор: inohodec 18.8.2008, 19:06 | ||
| Абалдеть ... (с) Ребята, объясните мне пожалуйста одну загадку Сейчас столкнулся и у меня ушел час на то что бы понять в чем проблема, а ПОЧЕМУ это происходит ... И так есть
Сначала для затравки - как вы думаете this.reasonCodes это кто Ну и сам вопрос ПОЧЕМУ ? |
| Автор: Ortega 18.8.2008, 19:53 |
| Осмелюсь предположить, что это - мап. Если компилятор (вдруг) считает, что это не так - можно попробовать переименовать параметр. В подобных случаях чаще всего - ошибка в программисте, а не в странной Яве (сам сколько раз попадался). А вообще, подобные совпадения имен - моветон. Были бы они хотя бы одного класса.... |
| Автор: Platon 18.8.2008, 19:56 |
| this.reasonCodes - это HashMap, почему? потому что ссылка this указывает на то, что reasonCodes не локальная переменная, а переменная объекта |
| Автор: inohodec 18.8.2008, 20:04 |
| В том то и беда this.reasonCodes - String !!! И почему это так я понять не могу ПС Я и не грешу на Java, скорее всего нехватка знаний с моей стороны |
| Автор: Ortega 18.8.2008, 20:13 |
| Это невозможно, потому что это невозможно. Переименуйте параметр и/или поле - и скорее всего, все станет ясно. |
| Автор: inohodec 18.8.2008, 20:25 |
| Я именно так и сделал, переименовал и все заработало Но вопрос остался Как такое невозможное возможно |
| Автор: Platon 18.8.2008, 20:33 |
| Лично у меня всё работает: ни IDE, ни javac ничего не говорят. скопировал/вставил приведенный кусок. |
| Автор: inohodec 18.8.2008, 20:38 |
| ... Все спасибо, вот что значит много работать :( Просто в дебагере - this.reasonCodes из this.reasonCodes.put(lineNumber, reasonCodes); Виден как стринг, а я ожидал что будет показыватся как HashMap Т.е. даже после 10 вставок, в дебагере я ничего не вижу ... просто стринг с новым значением Хотя после вызова get функции,возвращает правильное значение (HashMap) Спасибо |
| Автор: Platon 18.8.2008, 20:39 |
| А можно полностью класс, в котором ты работаешь? |
| Автор: Ortega 18.8.2008, 20:53 |
| Кажись, я понял. inohodec, ты останавливался в дебаггере, смотрел в разделе variables и видел там String. Я угадал? P.S. Кроме того, что такие совпадения моветон, они еще и на психику разрушающе действуют ;) |
| Автор: niasilil 19.8.2008, 03:59 | ||
+1 не верю. Давай кусок кода, номер jvm, на какой платформе... Хотя такого не бывает, хоть как называй, хоть уписайся и сделай кучу вложенных классов и назови все одинаково, компилятору пофиг как интерпретировать, у него своя четкая логика. И по этой логике такого быть не может. Убедите меня если я не прав. |
| Автор: inohodec 19.8.2008, 07:28 |
| Со всеми согласен, и именно по тому что сам так думаю и возникли траблы Т.е. все мои знания говорят что это не возможно, а глаза видят другое Я вчера был сильно уставший В дебагере, я вижу что это HashMap, тут он ведет себя вполне разумно Но, когда я делаю Inspect (Eclipse) что бы посмотреть что внутри Мне показывается только String, с последним значением И на этом этапе нет никакой возможности узнать что уже внутри ... А самое смешное После перезагрузки компа(и сна), все работает замечательно, т.е. так как нужно Наверное я что то начудил с именами, а потом по какой то причине Eclipse то ли не почистил кэш то ли ХЗ Или просто 23 часа за компом это слишком Всем спасибо |
| Автор: niasilil 20.8.2008, 02:58 |
| В эклипсе периодически баги вылезают, не заморачивайся. Их ловить очень сложно, потому что воспроизвести практически невозможно. Так и живем. |
| Автор: sergioK 28.8.2008, 16:15 | ||
Иноходец , отдыхать чаще надо потом как у string может быть метод put? Когда видишь такую лажу пользуй System.out.println а еще лучше пиши в отдельный файл , дебагер - не панацея от всех болезней , |