这是我的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的错误吗?
答案 0 :(得分:1)
没有错误。所有data M a = Raise Exception | Return a deriving Show
块和属性初始化程序都以给定的顺序运行,并将init
放在最后,如在反编译代码中所见。
请注意,将sp
和Context
设为静态(对于Kotlin,将其放入SharedPreferences
)在Android开发中是个坏主意。