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) {
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
Definieren Sie es als val oder var und verwenden Sie @SerializedName ("userSessionId") vor dem Feld in der Datenklasse. Dies sollte den Trick machen. – Oknesif
@ zsmb13 Transient funktioniert. Bitte erstellen Sie eine Antwort und ich werde es akzeptieren. – Francesc