我已经更新了我的Kotlin项目以使用支持库27.0.0.当我尝试在片段中获取Activity上下文时,我收到此错误:
> Type mismatch: inferred type is FragmentActivity? but Context was expected
Run Code Online (Sandbox Code Playgroud)
Eug*_*nec 17
它是安全的假设,activity或context不为空,在任何片段的生命周期方法(之间onAttach和onDetach).在这种情况下,
context!!
Run Code Online (Sandbox Code Playgroud)
看起来更好,因为如果它肯定不是 null,那么它就是null,这是非常错误的,你应该崩溃.
在异步回调当然检查null.
为了我 "!!" 绝不是选择.
然后一定要把它抽象出去.这就是我在BaseFragment课堂上所做的:
val context: Context
@JvmName("getContext2")
get() = getContext()!!
Run Code Online (Sandbox Code Playgroud)
然后在使用网站:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
context // Context is *never* null here.
}
fun someCallbackMethod() {
if (isAdded) {
context // Context is also not null here.
} else {
// But it is null here.
}
}
Run Code Online (Sandbox Code Playgroud)
无处不在的空检查与非空断言运算符一样糟糕.
这等于在添加了可空性注释的支持库27之前会发生的情况.您可以访问context任何地方,如果它为null并取消引用它将崩溃.
更新:最近的支持库为此案例引入了方法:
与我上面的建议不同的是,这些方法将抛出IllegalStateException而不是KotlinNullPointerException.
| 归档时间: |
|
| 查看次数: |
7131 次 |
| 最近记录: |