web-dev-qa-db-fra.com

La propriété doit être initialisée ou abstraite

Ce doit être une question stupide, mais je suis vraiment nouveau à Kotlin et je n'ai trouvé aucune solution.

Comment déclarer un champ de classe? Comme on peut l'avoir en Java:

protected SharedPreferences mSharedPreferences;

Et plus tard dans onCreate()

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

Maintenant, je peux l'utiliser n'importe où (dans les sous-classes de cette activité de base).

J'essaie de faire pareil à Kotlin:

protected var sharedPreferences : SharedPreferences

Et dans onCreate():

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

Mais je reçois un avertissement: "La propriété doit être initialisée ou abstraite"

72
Anton Shkurenko

Si vous souhaitez initialiser une propriété en dehors du constructeur, vous pouvez rechercher propriétés finalisées Déclarez la propriété avec le modificateur lateinit, ce qui permettra d'ignorer l'initialiseur par ailleurs requis et fera échouer l'accès à la propriété avec exception jusqu'à ce qu'une valeur significative lui soit affectée:

protected lateinit var sharedPreferences: SharedPreferences
125
Alexander Udalov

En tirant ceci des commentaires de la réponse de Alexander Udalov pour la visibilité. Pour les propriétés nullables:

protected var sharedPreferences : SharedPreferences? = null

... et lui assigner une valeur plus tard.

0
Tom Howard