2016-05-04 3 views
0

Я реализовал hashSet, и я добавил некоторые объекты, но позже мы изменили реализацию hashcode.как изменение в эффекте реализации hashcode на hashSet

1>, что произойдет в этом случае,

2> что делать, чтобы предотвратить изменение Hashcode implementaion

+2

Что значит «изменено во время выполнения»? – GhostCat

+0

Если вы изменили реализацию hashcode, тогда вы скомпилировали и повторно развернули новый код, поэтому вам пришлось перестроить hashset при перезапуске вашего кода, так что в чем проблема? – Andreas

ответ

3

Как очень часто, ответы: это зависит.

Предположим, что вы изменили реализацию hashCode() одного из ваших классов.

1) если (ваше приложение не сохраняет свои данные) , то при перезапуске приложения каждая часть будет использовать новую реализацию. таким образом: нет проблем

2) если (ваше приложение сохраняет свои данные) , то при перезагрузке приложение перезагрузит свои данные; и в зависимости от того, как/где вы изменили hashCode() ... могут возникнуть интересные вещи.

Для вашего второго вопроса; нет общего способа «решить» это, но есть хорошо известные практики, и если вы будете следовать им, шансы становятся меньше, чем кто-то испортит:

1) Образование и умение: старайтесь, чтобы все касались кода знает, что он делает (и не слепо следит за приказами), но вы сказали мне делать xyz, поэтому я сел и сделал точно xyz, не считая вообще, каковы последствия »)

2) Хороший дизайн, -использование существующих компонентов. Например: стандартная java поставляется с «известными» хорошими наборами, картами, коллекциями. Почему вы думаете, что вам нужно изобретать колесо, и почему вы думаете, что ваша реализация будет «лучше»?

3) Хорошие испытания. Сделайте TDD и убедитесь, что каждая новая функция имеет модульные тесты, которые охватывают все его поведение. И затем убедитесь, что ваши тесты устройства запускаются автоматически, когда кто-то подталкивает код в вашу систему контроля версий; так что вы заметите, когда материал сломается. Помимо этого, постройте разумные тесты функции/интеграции для тех аспектов, которые не могут быть проверены модульными тестами.

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