Примечание: этот ответ касается вообще изменяемых объектов, то есть объектов, для которых методы hashCode и equals зависят от значения изменяемых членов. В вашем случае, GamePiece является изменяемым, но методы equals и hashCode не зависят от изменяемых членов.
У меня такой вопрос, это нормально или
обычная практика в Java для некоторых
Члены не должны влиять на равных и
хэш-код?
Это приемлемая практика, если одни и те же члены используются для вычисления равных и хэш-кода.
Как это повлияет на его использование в моем ArrayList?
Как правило, изменяемые объекты не влияют на использование ArrayList: вы можете вставлять изменяемые объекты, добавлять (объект) , получать доступ к изменяемым объектам, используя их индекс, get (index) и удалить изменяемые объекты, используя их индекс remove (index) , без каких-либо побочных эффектов, поскольку ArrayList не вызывает equals () для этих методов.
Если вы удаляете или ищите объект с помощью методов remove (object) и indexOf (object), ArrayList вызовет equals () для объектов в ArrayList, поэтому вашей программе необходимо знать, что объекты в ArrayList возможно, изменился, так как они были вставлены. Это не будет проблемой для GamePiece, так как метод equals () не зависит от изменяемого члена.
Какой тип коллекций java будет
НЕ безопасно использовать этот объект сейчас
что это изменчиво?
Просто проверьте API коллекций , чтобы узнать, на какие классы или методы влияют изменяемые объекты. В общем случае не следует использовать изменяемые объекты в качестве ключа карты, но поскольку изменяемый член не влияет на методы hashCode и equals в GamePiece, вы можете использовать его в качестве ключа.
"Примечание: следует проявлять особую осторожность, если в качестве ключей карты используются изменяемые объекты. Поведение карты не указывается, если значение объекта изменяется таким образом, что это влияет на сопоставления равных, когда объект ключ на карте. Особый случай этого запрета состоит в том, что недопустимо, чтобы карта содержала себя в качестве ключа. В то время как для карты допустимо содержать себя в качестве значения, рекомендуется соблюдать крайнюю осторожность: Методы hashCode больше не определены на такой карте. "