为什么我们要在kotlin/android中获得一个稳定的引用?

fhity93d  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(382)

我在读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用例的引用。
为什么我们需要一个新的推荐人 imageCapturetakePhoto() ?
我们就不能用这个吗 imageCaptureMainActivity ?
这是为了某种“最佳实践”的东西还是我遗漏了什么?
任何建议都将不胜感激!

qmb5sa22

qmb5sa221#

它相当于一个空检查。

stable reference -> Not null reference

类似于

if(imageCapture==null) return;

在代码实验室他们也提到了同样的事情。
首先,获取对imagecapture用例的引用。如果用例为null,则退出函数。如果在设置图像捕获之前单击“照片”按钮,则该值为空。如果没有return语句,应用程序将在为null时崩溃。
所以基本上你是在消除npe的可能性,npe可以通过多种方式完成,他们碰巧使用了另一个局部变量。也可以通过 let .

imageCapture?.let{
 // code goes here
   }
6mw9ycah

6mw9ycah2#

private var imageCapture: ImageCapture? = null

在这一行中,您为imagecapture变量赋值为null。现在,当您开始使用takephoto()时,编译器如何知道imagecapture不再为null?
正如@adm所描述的,您可以使用

imageCapture?.let{
  //your code goes here
}

如果你愿意的话。这基本上是确保您不调用任何可为null的对象。

相关问题