我在读android camerax codelab:https://codelabs.developers.google.com/codelabs/camerax-getting-started#4
简化的代码段如下所示:
class MainActivity : AppCompatActivity() {
private var imageCapture: ImageCapture? = null
//(some other codes here...)
private fun takePhoto() {
// Get a stable reference of the modifiable image capture use case
val imageCapture = imageCapture ?: return
//(some other codes here...)
}
}
在代码实验室里,它说:
首先,获取对imagecapture用例的引用。
为什么我们需要一个新的推荐人 imageCapture
在 takePhoto()
?
我们就不能用这个吗 imageCapture
在 MainActivity
?
这是为了某种“最佳实践”的东西还是我遗漏了什么?
任何建议都将不胜感激!
2条答案
按热度按时间qmb5sa221#
它相当于一个空检查。
类似于
在代码实验室他们也提到了同样的事情。
首先,获取对imagecapture用例的引用。如果用例为null,则退出函数。如果在设置图像捕获之前单击“照片”按钮,则该值为空。如果没有return语句,应用程序将在为null时崩溃。
所以基本上你是在消除npe的可能性,npe可以通过多种方式完成,他们碰巧使用了另一个局部变量。也可以通过
let
.6mw9ycah2#
在这一行中,您为imagecapture变量赋值为null。现在,当您开始使用takephoto()时,编译器如何知道imagecapture不再为null?
正如@adm所描述的,您可以使用
如果你愿意的话。这基本上是确保您不调用任何可为null的对象。