如何定义此lambda表达式中的imageProxy参数?

问题描述

摘要

如何在Google的MLKit Vision示例代码中的this lambda expression中定义imageProxy参数?

详细信息

我了解lamda表达式的基本概念,例如w3schools examples中给出的概念,以及Oracle examples中给出的更详细的示例,但我仍在努力理解MLKit中引用的表达式是如何之所以解决此问题,是因为它似乎与其他示例不同:

  1. 没有与analysisUseCase.setAnalyzer关联的变量声明,就像上面w3schools链接中的最后两个示例一样。所以我不知道如何通过调用某个变量在其他地方定义imageProxy,因为没有变量要引用。
  2. 根据setAnalyzer上的javadoc注释,analysisUseCase.setAnalyzer的两个参数应为setAnalyzer(@NonNull Executor executor,@NonNull Analyzer analyzer)。除非Analyzer对象是某种类型的Consumer,否则我认为与w3schools中的第一个示例无关。此外,据我了解,这意味着lamda表达式应返回此类Analyzer对象,但是没有return语句。

此外,Android Studio的工具提示显示它解析为androidx.camera.core.ImageProxy imageProxy。短绒如何知道如何解决这个问题?

关于我为什么想知道这的根本问题是,我正在修改此示例代码,并希望访问我代码中其他位置的imageProxy.getWidth()方法。在不了解lamda表达式的情况下,我不确定如何访问此对象和关联的方法

解决方法

analysisUseCaseImageAnalysis类型,并提供了以ImageAnalysis.Analyzer作为第二个参数的方法setAnalyzer

Analyzer是具有一种方法的接口,意味着可以在其位置使用lambda表达式。定义的唯一方法是analyze(ImageProxy image),这就是lambda在这种情况下的实际含义。如您所见,analyze的一个参数是ImageProxy