Android Studio警告该值不能为null,但是,它可以。编译器有问题吗?

时间:2018-04-16 19:45:30

标签: android-studio kotlin

我使用的是最新版本的Android Studio。 今天编码时,我发现它给了我一个有趣的警告。所以在第45行,我有一个代码

categoryAdapter?.notifyDataSetChanged()

它表示categoryAdapter cannot be null,但是,它可以在第二个屏幕截图中清楚地看到。

enter image description here enter image description here

categoryAdapter初始化之前调用类别的setter,因此它是null(有意义的),如第3个屏幕截图所示(categoryAdapter在第87行初始化) 。 这是编译器中的错误吗?

enter image description here

2 个答案:

答案 0 :(得分:1)

您不能将;/?:@=&定义为可空。为了使它可以为空,你必须给它一种CategoryAdapter类型。我怀疑它没有抱怨你没有初始化它是因为你用@get:Bindable标记了它。

我建议将变量设为CategoryAdapter?而不是lateinit var可能更好。 Vals是不可变的,因此无论如何你都无法为它赋值。

答案 1 :(得分:1)

这是一个设计问题,但我没有看到编译器目前做的更好的替代方案。

当检查方法体时,基本上假设实例是完全构造的。否则,在初始化categoryAdapter之前,如果您在构造函数中调用此方法,则需要使用?标记任何对任何方法的categoryAdapter的访问权。

也许编译器可以特别处理init块中调用的方法,至少是非open块。