假设代码如下:
final View someView = ....;
// some code
someView.setOnClickListener(v -> {
if(someView == null) return;
Context context = someView.getContext();
// can context be null at this point?
});
视图是否可能在某些流程中具有空Context
?
答案 0 :(得分:0)
我的猜测:我认为,如果View不为null,则上下文不能为null。
检查View.java
的源代码,我们可以看到:
public class View {
public View(Context context) {
mContext = context;
}
public final Context getContext() {
return mContext;
}
}
如您所见,mContext
在构造函数中初始化,并且其引用不变(mContext
引用未更新)。它始终指向构造函数中接收到的引用。
另外,getContext()
是最终的。因此,不能确保getContext()
将始终执行上面的代码。
如果您尝试创建一个传递空指针的视图(例如View someView = new View(null)
),则您的应用将因其他原因而崩溃...因此,mContext
(和getContext()
)无法如果view不为null,则为null。