Проблемы могут возникать из-за мутабельности списков. Data class по умолчанию генерирует equals()
, hashCode()
и toString()
, которые основаны на свойствах. Если список внутри data class изменяется после создания инстанса, то:
equals()
может давать неверный результат. Два объекта data class с одинаковыми изначальными списками будут считаться равными, но после изменения одного из списков они формально перестанут быть равными (по содержимому списка), хотя equals()
может все еще возвращать true
, если реализация не проверяет содержимое мутабельных коллекций глубоко.hashCode()
может быть неправильным. Если hashCode()
рассчитывается на основе содержимого списка, изменение списка меняет хэш-код объекта. Это может привести к проблемам при использовании объектов в HashSet
или HashMap
.Решения:
List
, listOf()
вместо ArrayList
).toList()
) при создании нового инстанса data class, если исходный список мутабелен.Проблемы могут возникать из-за мутабельности списков. Data class по умолчанию генерирует equals()
, hashCode()
и toString()
, которые основаны на свойствах. Если список внутри data class изменяется после создания инстанса, то:
equals()
может давать неверный результат. Два объекта data class с одинаковыми изначальными списками будут считаться равными, но после изменения одного из списков они формально перестанут быть равными (по содержимому списка), хотя equals()
может все еще возвращать true
, если реализация не проверяет содержимое мутабельных коллекций глубоко.hashCode()
может быть неправильным. Если hashCode()
рассчитывается на основе содержимого списка, изменение списка меняет хэш-код объекта. Это может привести к проблемам при использовании объектов в HashSet
или HashMap
.Решения:
List
, listOf()
вместо ArrayList
).toList()
) при создании нового инстанса data class, если исходный список мутабелен.Register or sign in to get access to full answers for all questions from the question bank.