"laterinit" oder "by faul" beim Definieren von global android.widget var / val

8

Wenn eine globale Variable android.widget definiert wird, z. TextView , ist es vorzuziehen, lateinit oder by lazy zu verwenden? Ich dachte zuerst, dass by lazy vorzuziehen wäre, da es unveränderlich ist, aber ich bin mir nicht ganz sicher.

by lazy Beispiel:

%Vor%

lateinit Beispiel:

%Vor%

Gibt es Vorteile bei der Definition einer globalen android.widget var / val, wenn Sie eine über der anderen verwenden? Gibt es irgendwelche Probleme mit der Verwendung von by lazy , um ein android.widget val zu definieren? Basiert die Entscheidung nur darauf, ob Sie einen veränderlichen oder unveränderlichen Wert haben wollen?

    
Daniel Storm 18.05.2017, 20:12
quelle

1 Antwort

10

Es gibt eine Falle mit by lazy . Die Widget-Eigenschaft wäre schreibgeschützt und daher technisch final (in Java-Begriffen). Es gibt jedoch keine dokumentierte Garantie, dass onCreate() nur einmal für eine Instanz aufgerufen wird. Auch findViewById() könnte null zurückgeben.

Daher ist es besser, lateinit zu verwenden, und Sie erhalten eine Ausnahme, um Ihnen mitzuteilen, ob val vor onCreate() verwendet wurde.

Eine dritte Möglichkeit wären synthetische Android-Eigenschaften . Dann müssen Sie sich nicht um die Variablen kümmern.

%Vor%     
tynn 18.05.2017, 21:08
quelle