У меня есть объект
class Person {
@JsonProperty("name")
var name: String? = null
@JsonProperty("id")
lateinit var id: String}
Есть только пустой конструктор, и я хочу создать человека, поэтому написал:
val person = Person()
person.name = "someName"
person.id = "SomeId"
Я почти уверен, что есть более красивый синтаксис, что-то вроде
val person = Person {name = "someName" , id = "someId"}
но я не могу найти пример. я что-то пропустил? я должен создать вторичный конструктор для использования этого синтаксиса или есть другой способ?





Вы можете добиться этого с помощью параметра конструктора.
class Person(
@JsonProperty("name")
var name: String? = null,
@JsonProperty("id")
var id: String
)
val person = Person(name = "someName", id = "someId")
Другой способ - сделать ваш класс и желаемые переменные открытыми для переопределения.
open class Person {
@JsonProperty("name")
open var name: String? = null
@JsonProperty("id")
open var id: String = ""
}
val person = object : Person() {
override var name: String? = "SomeName"
override var id = "SomeId"
}
Пожалуйста, проверьте метод применять.
Ваш код будет таким:
val person = Person().apply {name = "someName", id = "someId"}
Другой путь - вы можете изменить объявление Person на (например, просто измените скобки, замените var на val и удалите lateinit):
class Person (@JsonProperty("name") val name: String? = null,
@JsonProperty("id") val id: String )
Тогда вы сможете это сделать:
val person = Person(name = "someName", id = "someId")