2017-10-10 6 views
1

J'ai abstraite Jeton de classe déclarée comme ceci:Kotlin: Comment hériter des biens en classe de données

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

Je veux hériter des biens d'index dans la classe de données, comme ceci:

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

Mais me donne l'erreur Data class primary constructor must have only property (val/var) parameters

Que dois-je faire pour résoudre ce problème?

Répondre

5

Il existe au moins deux solutions de contournement:

  • rendre la propriété open et override dans la classe de données primaire déclaration constructeur:

    abstract class Token(open var index: Int = 0) 
    
    data class CloseLoop(
        override var index: Int, 
        var openLoopIndex: Int = 0 
    ) : Token(index) 
    
  • Déclare une propriété avec un autre nom et initialiser les classe de base avec:

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

    Rendez-le private si vous le jugez approprié.

+0

Oh, j'ai juste raté ce 'open' dans la définition (je suis un peu nouveau à kotlin). Merci beaucoup, monsieur. – Yarick