Kotlin: конфликт объявлений платформы - PullRequest
1 голос
/ 26 января 2020

Я новичок в Kotlin и пытаюсь создать базовый класс c person со следующим кодом:

class Person(_firstName: String, _lastName: String, _age: Int){

    val firstName: String = _firstName
    val lastName: String = _lastName
    var age: Int = _age

    fun setAge(newAge: Int){
        age = newAge
    }
}

Я хотел добавить некоторые методы basi c в свой класс, такой как геттеры и сеттеры. Когда я создал функцию setAge и попытался скомпилировать, я получил следующие ошибки:

Error:(4, 5) Kotlin: Platform declaration clash: The following declarations have the same JVM signature (setAge(I)V):
    fun <set-age>(<set-?>: Int): Unit defined in Person
    fun setAge(newAge: Int): Unit defined in Person

Error:(6, 5) Kotlin: Platform declaration clash: The following declarations have the same JVM signature (setAge(I)V):
    fun <set-age>(<set-?>: Int): Unit defined in Person
    fun setAge(newAge: Int): Unit defined in Person

Я новичок в Kotlin и абсолютно не знаю, в чем проблема. У меня есть некоторый опыт работы с Java, и я никогда не сталкивался с какими-либо проблемами при создании (почти) тривиальных классов, подобных этому.

Может кто-нибудь объяснить, пожалуйста, для начинающих, в чем именно заключается проблема, и что я могу сделать чтобы решить эту проблему / избежать ее в будущем. Спасибо.

1 Ответ

3 голосов
/ 26 января 2020

Проблема здесь в следующем:

fun setAge(newAge: Int){
    age = newAge
}

Когда вы объявляете

var age: Int = _age

, он сгенерирует для вас метод setAge, поэтому вместо этого вы должны переопределить сеттер для age. В вашем случае, однако, в этом нет необходимости, поскольку сгенерированный установщик будет работать так же, как ваш setAge метод.

Вы также можете обратиться к официальной документации , чтобы узнать больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...