Предположим, у меня есть следующий класс Kotlin:
data class Person(val firstName: String, val lastName: String)
Поскольку это класс data
, будет автоматически сгенерирован метод со следующей сигнатурой:
fun copy(firstName: String = this.firstName, lastName: String = this.lastName): Person
СейчасЯ бы хотел вызвать этот метод из кода Java, например:
Person john = new Person("John", "Smith");
Person adam = john.copy("Adam");
Я ожидаю, что сейчас у меня будет два Person
объекта: "Джон Смит" и "Адам Смит".
К сожалению, метод copy
не имеет перегруженных вариантов, и я не вижу способа добавить их через @JvmOverloads
.
До сих пор я пытался перегрузить его и создать расширение,но он затенен и работает как статический метод в Java (плюс много шаблонов):
@JvmOverloads
fun Person.copy(firstName: String = this.firstName, lastName: String = this.lastName): Person {
return this.copy(firstName = firstName, lastName = lastName)
}
Можно ли сделать так, чтобы не было написано слишком много кода?