Подтвердить что ты не робот

Имущество должно быть инициализировано или быть абстрактным

Это должен быть глупый вопрос, но я действительно новичок в Kotlin, и я не нашел никакого решения.

Как объявить поле класса? Как мы можем иметь его в java:

protected SharedPreferences mSharedPreferences;

И позже в onCreate():

mSharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

Теперь я могу использовать его везде, где хочу (в подклассах этого базового действия).

Я пытаюсь сделать то же самое в Котлине:

protected var sharedPreferences : SharedPreferences

И в onCreate():

sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this)

Но я получаю предупреждение: "Имущество должно быть инициализировано или быть абстрактным"

4b9b3361

Ответ 1

Если вы хотите инициализировать свойство вне конструктора, то late-initialized properties - это то, что вы, возможно, ищете. Объявите свойство с помощью модификатора lateinit, который позволит пропустить требуемый инициализатор в противном случае и приведет к отказу доступа к ресурсу с исключением, пока ему не будет присвоено какое-либо значимое значение:

protected lateinit var sharedPreferences: SharedPreferences