Класс данных Kotlin, скопируйте значения полей одного класса данных в другой класс данных с теми же полями

#android #kotlin

#Android #kotlin

Вопрос:

Привет, у меня есть класс данных Books с некоторыми полями, такими как идентификатор, имя, цена и т.д. У меня есть другой класс данных, LocalBooks содержащий точно такие же same поля, как class Books . Я хочу скопировать все значения полей Books класса данных в поля LocalBooks . Я пробовал этот способ. Это удобно, когда у вас всего несколько полей, но когда у вас больше полей выше 20 или больше, то выполнение этого метода занимает много времени. Я хотел знать, есть ли в kotlin какой-либо метод, который может помочь в этой цели.

 data class Books(val name: String, val price: Int) : Serializable
data class LocalBooks(val name: String, val price: Int) : Serializable
val books = Books("Book1", 22)
val localBooks = LocalBooks(books.name, books.price)
  

Комментарии:

1. «У меня есть другой класс данных LocalBooks с точно такими же полями, как книги классов» — почему? Почему бы не иметь один Books класс, который имеет isLocal: Boolean = false свойство, которое вы установили true для локальных книг? Если вы это сделаете, то для ваших нужд достаточно простого copy() .

2. Или вы даже можете расширить свой класс «Книги», если вы не хотите иметь решение, подобное комментарию выше.

3. Вы можете использовать отражение. Или полностью отклоните классы и используйте Map реализацию для имитации поведения динамических языков.

Ответ №1:

Как насчет решения по принципу составного повторного использования:

 data class Book(val name: String, val price: Int)
data class LocalBook(val book: Book, val localInfo: String)
val book = Book("foo", 1)
val localBook = LocalBook(book.copy(), "bar")
  

Комментарии:

1. привет, что здесь «bar»?

2. привет. просто одноразовое значение-заполнитель для LocalBook свойства localInfo .