webentwicklung-frage-antwort-db.com.de

Eigenschaft muss initialisiert oder abstrakt sein

Es muss eine dumme Frage sein, aber ich bin neu bei Kotlin und habe keine Lösung gefunden.

Wie deklariere ich das Klassenfeld? Wie können wir es in Java haben:

protected SharedPreferences mSharedPreferences;

Und später in onCreate()

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

Jetzt kann ich es überall verwenden (in Unterklassen dieser Basisaktivität).

Ich versuche dasselbe in Kotlin zu tun:

protected var sharedPreferences : SharedPreferences

Und in onCreate():

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

Ich bekomme jedoch eine Warnung: "Eigenschaft muss initialisiert werden oder abstrakt sein"

72
Anton Shkurenko

Wenn Sie eine Eigenschaft außerhalb des Konstruktors initialisieren möchten, suchen Sie nach late-initialized properties . Deklarieren Sie die Eigenschaft mit dem Modifizierer lateinit, der das sonst erforderliche Initialisieren überspringen kann und den Zugriff auf die Eigenschaft mit Ausnahme fehlschlagen lässt, bis ihm ein sinnvoller Wert zugewiesen wird:

protected lateinit var sharedPreferences: SharedPreferences
125

Dies aus den Kommentaren von Alexander Udalovs Antwort auf Sichtbarkeit zu ziehen. Für nullwertfähige Eigenschaften:

protected var sharedPreferences : SharedPreferences? = null

... und vergeben Sie später einen Wert.

0
Tom Howard