2017-10-26 3 views
0

In meinem POJO erkläre ich in der Regel die Felder wie diesePOJO Felddeklaration, auf init Wert oder null

class SampleModel { 
    var field1: String? = null 
    var field2: Int? = null 
    <more fields here> 
} 

Wenn ich so erklären, ich werde überprüfen müssen, wenn das Feld null ist oder nicht.

Aber wenn wie folgt aus:

class SampleModel { 
    var field1 = "" 
    var field2 = 0 
    <more fields here> 
} 

kann ich es direkt verwenden.

Ist es wichtig, welche Deklaration zu verwenden ist? Wie in Bezug auf Speicher, Leistung oder alles, was eine gute Praxis zu tun?

Sagen wir, ich habe 100 Felder. Dann verwende ich Moshi oder Gson für den Deserializer.

+0

Für perf sind Werte wie die leere Zeichenfolge interniert und nichts kostet. Für Code hängt es davon ab, was Sie versuchen, und wenn Sie wirklich Standardwerte möchten. Sie können Datenklassen mit Konstruktoren erstellen, die nicht nullfähige Typen verwenden, und Moshi's KotlinJsonAdapter verwenden, um diese JSON-Felder zu verlangen. –

Antwort

1

Am Ende sogar über die Leistung hinaus ist die Qualität des Codes. Wenn die Felder in Ihren Anwendungsfällen niemals wirklich null sind, würde ich keine Nullable-Typen verwenden. Du zwingst dich dazu, zusätzliche Arbeit zu leisten (obwohl Kotlin es etwas einfacher macht), um auf ein Szenario einzugehen, das anscheinend nicht möglich ist?

Auf der anderen Seite; Wenn ein Feld in der Serialisierung in diesem Szenario fehlen würde, könnten Sie es nicht sofort abfangen, da das Feld in der Klasse einen Standardwert hat. Wenn Sie sicher sind, dass die Daten bereitgestellt werden, sollte dies kein Problem darstellen.

+0

Welcher Teil meiner Frage sagt etwas aus, was nicht möglich ist? – iori24

+0

Wenn es möglich wäre, würde ich keinen Grund sehen, die zweite Option überhaupt in Betracht zu ziehen? Wenn NULL möglich ist, müssen Sie NULL-fähige Typen haben, und Sie erhalten keinen Vorteil, wenn Sie NULL-Wert-Typen Standardwerte zuweisen. – dillius

1

IMO, Speicher und Leistung sollten nicht berücksichtigt werden, wenn Sie zwischen diesen beiden Ansätzen wählen. Es hängt davon ab, wie die Klasse sich verhalten soll. Um einen Standardwert (Ansatz 2) oder Null (Ansatz 1) zu haben. Es spielt eine Rolle, wenn Sie mit der Logik dieser Klasse umgehen müssen.