Kann die Kotlin-Datenklasse mehr als einen Konstruktor haben?

9

Ich weiß, dass Datenklassen wie einfache Modelle in Kotlin mit getters und Setter standardmäßig sind und sind so einfach:

%Vor%

Ist es möglich, einen zweiten Konstruktor für diese Datenklasse zu deklarieren?

    
Eder Padilla 06.06.2017, 13:33
quelle

5 Antworten

9

Ja, aber jede Variable sollte initialisiert werden, sodass Sie in Ihrem Datenklassenkonstruktor Standardargumente wie folgt setzen können:

%Vor%

Nun können Sie die Instanz dieser Datenklasse auf zwei Arten erstellen:

  • Person(30)
  • Person(20, "Bob")
Alexey Denysenko 06.06.2017, 13:53
quelle
7

Eine Kotlin-Datenklasse muss einen primären Konstruktor haben, der mindestens ein Element definiert. Darüber hinaus können Sie sekundäre Konstruktoren hinzufügen, wie in Klassen und Vererbung - Sekundäre Konstruktoren

Für Ihre Klasse und Beispiel sekundären Konstruktor:

%Vor%

Beachten Sie, dass der sekundäre Konstruktor in seiner Definition an den primären Konstruktor delegieren muss.

Obwohl viele Dinge, die für Sekundärkonstruktoren typisch sind, durch Vorgabewerte für die Parameter gelöst werden können. Im obigen Fall könnten Sie vereinfachen:

%Vor%

Wenn Sie diese aus Java aufrufen, sollten Sie das Java-Interop - Java aufrufen, das Kotlin aufruft Dokumentation zum Generieren von Überladungen, und vielleicht auch manchmal das NoArg Compiler-Plugin für andere Sonderfälle.

    
Jayson Minard 06.06.2017 18:51
quelle
1

Aktualisierte Antwort für Datenklassen:

Ja, Sie können das, aber Sie müssen alles an den primären Konstruktor delegieren

%Vor%

Sie können auch Standardwerte in Ihrem primären Konstruktor als Alexey festlegen.

    
Robert 06.06.2017 13:38
quelle
1

Ja, wir können wie im folgenden Code verwenden und im primären Konstruktor für die Datenklasse mindestens einen Parameter haben.

%Vor%     
Muthukrishnan Rajendran 06.06.2017 13:54
quelle
0

Die Datenklasse gewährleistet Konsistenz und sinnvolles Verhalten. Außerdem müssen wir val für die Unveränderbarkeit angeben.

%Vor%

}

sekundärer Konstruktor muss an den primären Konstruktor in seiner Definition delegieren, um die Unveränderlichkeit zu erhalten, funktioniert "null".

    
boopathiraja 07.03.2018 07:14
quelle

Tags und Links