поле котлина не установлено значение - PullRequest
0 голосов
/ 28 августа 2018

вот мой код kotlin для android。kotlin версия 1.2.41

    private fun getUserFromSharePreferences() {

    Timber.d("getSP() = ${getSP()}")  // sharedPreferences
    Timber.d("sp = ${sp}")  // null
    }


    private fun getSP() = CoreApplication.context.getSharedPreferences(FLAG_SP_USER, Context.MODE_PRIVATE)

    private val sp = CoreApplication.context!!.getSharedPreferences(FLAG_SP_USER, Context.MODE_PRIVATE)!!

используйте "sp", чтобы получить ноль. использовать "getSP ()" получить объект


вот декомпилированный код

public final class UserKt {
   private static User currentUser = getUserFromSharePreferences();
   private static final SharedPreferences sp;




   private static final void getUserFromSharePreferences() {
      Timber.d("getSP() = " + getSP(), new Object[0]);
      Timber.d("sp = " + sp, new Object[0]);
   }

   private static final SharedPreferences getSP() {
      return CoreApplication.context.getSharedPreferences("FLAG_SP_USER", 0);
   }

   static {
      Context var10000 = CoreApplication.context;
      if(CoreApplication.context == null) {
         Intrinsics.throwNpe();
      }

      SharedPreferences var0 = var10000.getSharedPreferences("FLAG_SP_USER", 0);
      if(var0 == null) {
         Intrinsics.throwNpe();
      }

      sp = var0;
   }
}

зачем использовать "sp", чтобы получить ноль? такое ошибка котлина?

1 Ответ

0 голосов
/ 28 августа 2018

Нет ошибок. Все init блоки и инициализаторы свойств выполняются в указанном порядке, и вы ставите sp в конце, как вы можете видеть в декомпилированном коде.

В качестве дополнительного примечания, делать Context и SharedPreferences статическими (в случае Kotlin, помещая их в object) - плохая идея в разработке для Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...