Можно ли добавить @JvmOverloads к сгенерированному методу copy (...) в Kotlin? - PullRequest
0 голосов
/ 19 сентября 2018

Предположим, у меня есть следующий класс 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)
}

Можно ли сделать так, чтобы не было написано слишком много кода?

1 Ответ

0 голосов
/ 08 апреля 2019

Нет.Но мы можем переопределить метод копирования самостоятельно.Как это:

data class CustomTextInfo(
    val text: String,
    val textColor: Int,
    val backgroundColor: Int,
    val fontId: Int
) {
    fun copy(): CustomTextInfo {
        return CustomTextInfo(text, textColor, backgroundColor, fontId)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...