0

概括

Google 的 MLKit Vision 示例代码中的这个 lambda 表达式中的 imageProxy参数是如何定义的?

细节

我了解 lamda 表达式的基本概念,例如w3schools 示例中给出的那些,以及Oracle 示例中给出的更详细的示例,但我很难理解 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. linter 如何知道如何解决这个问题?

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

4

1 回答 1

0

analysisUseCase是类型ImageAnalysis,并提供了一个以setAnalyzeraImageAnalysis.Analyzer作为第二个参数的方法。

Analyzer是一个带有一种方法的接口,这意味着可以使用 lambda 表达式代替它。唯一定义的方法是analyze(ImageProxy image),这就是 lambda 在这种情况下实际表示的方法。正如你所看到的一个论点analyzeImageProxy

于 2020-09-07T10:09:41.100 回答