Скажем, у меня есть класс данных
data class MyClass(val crop: Rect, val name: String)
Но я хочу сделать копию переданного Rect, так как я не хочу, чтобы значение было изменено позже. Я не хочу, чтобы звонивший звонил
MyClass(Rect(inCrop), "name")
в коде. Как я могу сделать это в своем классе данных?
Спасибо.
Решение проблемы
Я могу придумать один обходной путь:
data class MyClass(private var privateCrop: Rect, val name: String) {
val crop get() = privateCrop
init {
privateCrop = Rect(privateCrop)
}
}
Вы делаете crop
private и делаете его var( privateCrop
), затем добавляете для него общедоступный геттер. Теперь вы можете скопировать его в init
блок.
Но должен признать, это довольно некрасиво. Лучшее решение здесь, я думаю, состоит в том, чтобы измениться Rect
, чтобы быть неизменным, но если Rect
это не находится под вашим контролем, то, я думаю, ничего не поделаешь. Вы также можете рассмотреть возможность использования обычного класса.
Комментариев нет:
Отправить комментарий