Котлин. Класс данных: как обновить один из параметров?
У меня есть класс данных. Например:
data class Test(
val data: String,
val data2: String
)
Предположим, мне нужно изменить один из параметров моего класса данных. Для этого я напишу следующий код:
var test = Test(data = "data", data2 = "data2")
test = test.copy(data = "new_data")
Но при этом я могу сделать параметрvar
и измените его напрямую:
data class Test(
var data: String,
val data2: String
)
var test = Test(data = "data", data2 = "data2")
test.data = "new_data"
Какой метод лучше использовать? Предположим, что мой класс данных может иметь большое количество параметров, не возникнет ли в этом случае проблем при использованииcopy()
.
Пожалуйста, помогите мне.
2 ответа
Зависит от того, как вы используете класс.
Я считаю, что более распространено использование классов данных для представления «последнего состояния» чего-либо, и в этом случае вы не хотите использовать его, потому что это подвержено ошибкам. Это не позволяет вам сравнивать старые и новые данные, использовать класс в наборах и в качестве ключей карты и т. д.
Если они отображают текущее состояние (чаще в играх и симуляциях),var
может быть применимо, и в этом случае вы обнаружите, что вам редко нужна эта функция. Если вы используетеcopy()
в этом случае вы получаете новую копию, не затрагивая оригинал.
Это зависит от варианта использования. Я не думаю, что есть глобально предпочтительный способ.
Если ваш класс данных должен быть неизменным (используя только vals), перейдите к
В противном случае
Поэтому, если вы можете использовать неизменяемый класс данных, я бы предпочел, чтобы с