У меня есть 10+ параметр в классе данных, я хочу инициализировать класс данных с помощью пустого конструктора и установить значения только для нескольких параметров с помощью установщика и передать объект на сервер.
data class Activity(
var updated_on: String,
var tags: List<String>,
var description: String,
var user_id: List<Int>,
var status_id: Int,
var title: String,
var created_at: String,
var data: HashMap<*, *>,
var id: Int,
var counts: LinkedTreeMap<*, *>,
)
Использование:
Как то так будет легко
val activity = Activity();
activity.title = "New Computer"
sendToServer(activity)
Но он требует передачи всех аргументов при создании конструктора. Как я могу упростить как выше?
val activity = Activity(null,null,null,null,null,"New Computer",null,null,null,null);
sendToServer(activity)
copy
вам нужен экземпляр класса данных. Чтобы создать его, вам нужно вызвать конструктор - и здесь была проблема.emptyList
не будет повторно выделять память. Возвращает синглтон .Если вы задаете значения по умолчанию для всех полей - Kotlin автоматически генерирует пустой конструктор.
и вы можете просто позвонить:
источник
class FeelComChatMessage (messageText: String = "", messageUser: String = "")
Наряду с ответом @miensol, позвольте мне добавить некоторые детали:
Если вам нужен Java-видимый пустой конструктор, использующий классы данных, вы должны определить его явно.
Использовать значения по умолчанию + спецификатор конструктора довольно просто:
Это означает, что с помощью этого трюка вы теперь можете сериализовать / десериализовать этот объект с помощью стандартных сериализаторов Java (Джексон, Гсон и т. Д.).
источник
Если вы задаете значение по умолчанию для каждого параметра основного конструктора:
и из класса, где экземпляры вы можете вызвать его без аргументов или с аргументами, которые у вас есть в тот момент
источник
Я бы предложил изменить основной конструктор и добавить значение по умолчанию для каждого параметра:
Вы также можете сделать значения обнуляемыми, добавив,
?
а затем вы можете задаватьnull
:Вообще, хорошей практикой является избегать объектов, которые могут быть обнуляемыми - пишите код так, чтобы нам не нужно было его использовать. Не допускающие обнуления объекты являются одним из преимуществ Kotlin по сравнению с Java. Поэтому первый вариант выше предпочтителен .
Оба варианта дадут вам желаемый результат:
источник
Непустой вторичный конструктор для класса данных в Котлине:
Пустой вторичный конструктор для класса данных в Котлине:
источник
Из документации
источник