Kotlin字段未设置值

时间:2018-08-28 06:05:31

标签: kotlin

这是我的android kotlin代码。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”获取空值? 是Kotlin的错误吗?

1 个答案:

答案 0 :(得分:1)

没有错误。所有data M a = Raise Exception | Return a deriving Show块和属性初始化程序都以给定的顺序运行,并将init放在最后,如在反编译代码中所见。

请注意,将spContext设为静态(对于Kotlin,将其放入SharedPreferences)在Android开发中是个坏主意。