2017-11-30 4 views
0

ich eine Datenklasse in Kotlin haben, die von einer Java-Klasse erbt, die einen Konstruktor mit 1 Argument definiert,Datenklasse von Java-Klasse erben

public BaseClass(String userSessionId) { 
    this.userSessionId = userSessionId; 
} 

Meine Kotlin Klasse wird als diese definiert

class DerivedClass(
    userSessionId: String, 
    var other: Other? = null 
) : BaseClass(userSessionId) { 

Ich kann es nicht als eine Datenklasse wegen userSessionId definieren, die Kotlin benötigt, um ein val oder var in Datenklassen zu sein. Wenn dies jedoch der Fall ist, löst Retrofit eine Ausnahme aus, da es zwei Mitglieder mit dem Namen userSessionId gibt. Gibt es eine Möglichkeit, eine Datenklasse von einer Java-Klasse zu erben, wobei ein Konstruktor Argumente übernimmt? Beachten Sie, dass ich die Basisklasse nicht ändern kann.

Eine mögliche Lösung ist, eine Dummy-val zu definieren den Namen Zusammenstoß zu vermeiden, aber das ist weniger als ideal

data class DerivedClass(
    val dummy: String, 
    var other: Other? = null 
) : BaseClass(dummy) { 
+1

Wie wäre es mit der Kennzeichnung der Eigenschaft in 'DerivedClass' als [' @ Transient'] (https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.jvm/-transient/index.html)? Retrofit sollte es gemäß [dieser Antwort] ignorieren (https://stackoverflow.com/a/33557429/4465208). – zsmb13

+0

Definieren Sie es als val oder var und verwenden Sie @SerializedName ("userSessionId") vor dem Feld in der Datenklasse. Dies sollte den Trick machen. – Oknesif

+0

@ zsmb13 Transient funktioniert. Bitte erstellen Sie eine Antwort und ich werde es akzeptieren. – Francesc

Antwort

2

Sie können use the transient keyword in Java während der Serialisierung ein Feld zu ignorieren, kann dies in Kotlin erfolgen Verwenden Sie stattdessen die Annotation in der Eigenschaft.