2017-10-10 2 views
1

Ich habe abstrakten Token Klasse wie folgt erklärt:Kotlin: Wie Eigenschaft in Datenklasse erben

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

Ich möchte Index Eigenschaft in Datenklasse erben, wie folgt aus:

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

Aber es gibt mir Fehler Data class primary constructor must have only property (val/var) parameters

Was muss ich tun, um das zu beheben?

Antwort

5

Es gibt mindestens zwei Lösungen:

  • Sprechen Sie die Eigenschaft open und override es in der Datenklasse primären Konstruktor-Deklaration:

    abstract class Token(open var index: Int = 0) 
    
    data class CloseLoop(
        override var index: Int, 
        var openLoopIndex: Int = 0 
    ) : Token(index) 
    
  • eine Eigenschaft deklarieren unter einem anderen Namen und initialisieren die Basisklasse damit:

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

    Machen Sie es private, wenn Sie es für angebracht halten.

+0

Oh, ich habe gerade das 'offen' in der Definition verpasst (ich bin etwas neu zu Kotlin). Vielen Dank, Herr. – Yarick

Verwandte Themen