当前位置 : 主页 > 手机开发 > android >

android – 具有合成绑定和可空性的Kotlin视图

来源:互联网 收集:自由互联 发布时间:2021-06-11
我注意到当使用Kotlin的合成绑定时,返回的视图为非null(Kotlin将返回View!).但这对我来说没有多大意义,因为findCachedViewById实际上可以返回null结果,这意味着视图实际上可以为null. public Vi
我注意到当使用Kotlin的合成绑定时,返回的视图为非null(Kotlin将返回View!).但这对我来说没有多大意义,因为findCachedViewById实际上可以返回null结果,这意味着视图实际上可以为null.

public View _$_findCachedViewById(int var1) {
  if(this._$_findViewCache == null) {
     this._$_findViewCache = new HashMap();
  }

  View var2 = (View)this._$_findViewCache.get(Integer.valueOf(var1));
  if(var2 == null) {
     View var10000 = this.getView();
     if(var10000 == null) {
        return null;
     }

     var2 = var10000.findViewById(var1);
     this._$_findViewCache.put(Integer.valueOf(var1), var2);
  }

  return var2;
}

那么为什么在这种情况下它们不是可选的呢?为什么Kotlin不回归View?当使用合成绑定时,开发人员在处理视图时会被迫检查是否为空;

也许这只是因为我是Kotlin的新手,但我认为这有点反直觉,因为变量不是可选的,但我们仍然应该检查View是否实际上不是null.

那么在这种情况下,做下面的代码是否有意义?

view?.let {
    // handle non null view here
}
我想通了,我发帖后总能找到正确的SO问题:)

View之后的单个感叹号实际上并不意味着视图不能像我预期的那样为null.

这answer到另一个问题基本上回答了我的确切问题.使用合成绑定时,View实际上可以为null,但我们无法确定,因此是单个感叹号.

所以可以安全地假设我上面发布的代码 – 使用?.let {…}是完全可以接受的方式来处理视图,当你不确定它们是否已经在访问它们时已经初始化.

视图可能为null的情况非常罕见,但可能会发生.

网友评论