Ich habe mehr als 10 Parameter in einer Datenklasse. Ich möchte die Datenklasse mit einem leeren Konstruktor initialisieren und die Werte nur für wenige Parameter mit dem Setter festlegen und das Objekt an den Server übergeben.
data class Activity(
var updated_on: String,
var tags: List<String>,
var description: String,
var user_id: List<Int>,
var status_id: Int,
var title: String,
var created_at: String,
var data: HashMap<*, *>,
var id: Int,
var counts: LinkedTreeMap<*, *>,
)
Verwendung:
So etwas wird einfach sein
val activity = Activity();
activity.title = "New Computer"
sendToServer(activity)
Es müssen jedoch alle Argumente beim Erstellen des Konstruktors übergeben werden. Wie kann ich wie oben vereinfachen?
val activity = Activity(null,null,null,null,null,"New Computer",null,null,null,null);
sendToServer(activity)
copy
benötigen Sie eine Datenklasseninstanz. Um es zu erstellen, müssen Sie einen Konstruktor aufrufen - und hier war das Problem.emptyList
wird nicht wiederholt Speicher zuweisen.Es wird ein Singleton zurückgegeben .Wenn Sie allen Feldern Standardwerte zuweisen, wird der leere Konstruktor automatisch von Kotlin generiert.
und Sie können einfach anrufen:
quelle
class FeelComChatMessage (messageText: String = "", messageUser: String = "")
Lassen Sie mich zusammen mit der Antwort von @miensol einige Details hinzufügen:
Wenn Sie einen Java-sichtbaren leeren Konstruktor mit Datenklassen verwenden möchten, müssen Sie ihn explizit definieren.
Die Verwendung von Standardwerten + Konstruktorspezifizierer ist ganz einfach:
Dies bedeutet, dass Sie mit diesem Trick dieses Objekt jetzt mit den Standard-Java-Serialisierern (Jackson, Gson usw.) serialisieren / deserialisieren können.
quelle
Wenn Sie jedem primären Konstruktorparameter einen Standardwert zuweisen:
und aus der Klasse, in der die Instanzen Sie ohne Argumente oder mit den Argumenten aufrufen können, die Sie in diesem Moment haben
quelle
Ich würde vorschlagen, den primären Konstruktor zu ändern und jedem Parameter einen Standardwert hinzuzufügen :
Sie können Werte auch durch Hinzufügen auf
?
Null setzen und dann Folgendes festlegennull
:Im Allgemeinen wird empfohlen, nullbare Objekte zu vermeiden. Schreiben Sie den Code so, dass wir sie nicht verwenden müssen. Nicht nullfähige Objekte sind einer der Vorteile von Kotlin gegenüber Java. Daher ist die erste Option oben vorzuziehen .
Mit beiden Optionen erhalten Sie das gewünschte Ergebnis:
quelle
Nicht leerer sekundärer Konstruktor für Datenklasse in Kotlin:
Leerer sekundärer Konstruktor für Datenklasse in Kotlin:
quelle
Aus der Dokumentation
quelle