不在 Kotlin 中创建 ContextWrapper 实例调用 'getSharedPreferences' 方法的原因是什么?
What is the reason 'getSharedPreferences' method called by not making instance of ContextWrapper in Kotlin?
我写了如下代码,
val preference by lazy {
getSharedPreferences("PreExActivity", Context.MODE_PRIVATE)
}
并且想知道 'getSharedPredferences' 方法的根源..
所以我找到了API..
public class ContextWrapper extends Context {
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
}
使用我在第一段代码中写的 getSharedPreferences 方法是否正确?
我觉得..
ContextWrapper().getSharedPreferences("PreExActivity", Context.MODE_PRIVATE)
就是使用那个方法的方法。
怎么可能?
因此您正在从 AppCompatActivity
调用 getSharedPreferences
方法。
这是完全正确的。
AppCompatActivity
扩展FragmentActivity
,扩展ComponentActivity
,扩展Activity
,扩展ContextThemeWrapper
,扩展ContextWrapper
扩展 Context
。 Context
是一个 abstract
class,它实际上定义了 getSharedPreferences
方法。
使用 Activity
调用 getSharedPreferences(String name, int mode)
方法实际上是调用 ContextWrapper
的 getSharedPreferences(String name, int mode)
,因为 Activity
继承了它。
我写了如下代码,
val preference by lazy {
getSharedPreferences("PreExActivity", Context.MODE_PRIVATE)
}
并且想知道 'getSharedPredferences' 方法的根源..
所以我找到了API..
public class ContextWrapper extends Context {
@Override
public SharedPreferences getSharedPreferences(String name, int mode) {
return mBase.getSharedPreferences(name, mode);
}
}
使用我在第一段代码中写的 getSharedPreferences 方法是否正确?
我觉得..
ContextWrapper().getSharedPreferences("PreExActivity", Context.MODE_PRIVATE)
就是使用那个方法的方法。
怎么可能?
因此您正在从 AppCompatActivity
调用 getSharedPreferences
方法。
这是完全正确的。
AppCompatActivity
扩展FragmentActivity
,扩展ComponentActivity
,扩展Activity
,扩展ContextThemeWrapper
,扩展ContextWrapper
扩展 Context
。 Context
是一个 abstract
class,它实际上定义了 getSharedPreferences
方法。
使用 Activity
调用 getSharedPreferences(String name, int mode)
方法实际上是调用 ContextWrapper
的 getSharedPreferences(String name, int mode)
,因为 Activity
继承了它。