Intereting Posts
Преобразование Double в ByteArray или Array <Byte> Kotlin Почему можно опустить значения по умолчанию в переопределенных функциях-членах подтипов? Переопределение одной и той же подписи из разных закладок Удалить слушателя Firebase не работает NoClassDefFoundError для класса Kotlin в тесте JUnit во время выполнения Kotlin IllegalAccessError с + = и – = для делегированного интерфейса Почему в этой ситуации не управляется smart-cast? Val не может переназначить ошибку времени компиляции для локальной переменной в fun в kotlin Как сделать операцию «салфетки информации»? java.lang.IncompatibleClassChangeError после обновления до kotlin RC1 (1.0.0-rc-1036) ошибка в аннотациях kotlin? Нестандартное представление Android для медленного рендеринга с возможностью выделения фона Какова концепция намерения Котлина? Пользовательский Сериализатор Джексона делегирует Джексону сериализацию Intellij невежество на .kt файлов в структуре пакета без инструкции «package ..»? ЗАЧЕМ?

Kotlin: Как наследовать свойство в классе данных

У меня есть абстрактный класс токена, объявленный следующим образом:

abstract class Token(var index: Int = 0) { open fun merge(toMerge: Token): Token? { return null } } 

Я хочу наследовать свойство index в классе данных, например:

 data class CloseLoop(index: Int, var openLoopIndex: Int = 0) : Token(index) 

Но это дает мне ошибку. Data class primary constructor must have only property (val / var) parameters

Что я должен сделать, чтобы исправить это?

Есть, по крайней мере, два метода обхода:

  • Сделать свойство open и переопределить его в объявлении основного конструктора класса данных:

     abstract class Token(open var index: Int = 0) data class CloseLoop( override var index: Int, var openLoopIndex: Int = 0 ) : Token(index) 
  • Объявите свойство с другим именем и инициализируйте его базовым классом:

     data class CloseLoop(val theIndex: Int, var openLoopIndex: Int = 0) : Token(theIndex) 

    Сделайте его private если найдете его уместным.