如何定义这个lambda表达式中的imageproxy参数?

gcmastyq  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(451)

摘要

google的mlkit vision示例代码中的lambda表达式中的imageproxy参数是如何定义的?

详细信息

我理解lamda表达式的基本概念,例如w3schools示例中给出的那些,以及oracle示例中给出的更详细的示例,但我很难理解mlkit中引用的一个表达式是如何解析的,因为它似乎与其他示例不同:
没有与analysisusecase.setanalyzer关联的变量声明,就像上面链接中的最后两个示例一样。所以我不知道imageproxy在其他地方是如何通过调用某个变量来定义的,因为没有可引用的变量。
根据setanalyzer上的javadoc注解,analysisusecase.setanalyzer的两个参数应该是 setAnalyzer(@NonNull Executor executor, @NonNull Analyzer analyzer) . 除非analyzer对象是某种使用者,否则我看不出与w3中的第一个示例有任何关系。此外,我的理解是,这意味着lamda表达式应该返回这样一个analyzer对象,但是没有return语句。
此外,androidstudio的工具提示显示,它决定 androidx.camera.core.ImageProxy imageProxy . 林特怎么知道怎么解决这个问题?
关于我为什么想知道这一点的根本问题是,我正在修改这个示例代码,并希望访问 imageProxy.getWidth() 方法。如果不理解lamda表达式,我就不知道如何访问这个对象和关联的方法。

eaf3rand

eaf3rand1#

analysisUseCase 属于类型 ImageAnalysis 并提供了一种方法 setAnalyzer 有一个 ImageAnalysis.Analyzer 作为第二个论点。
那个 Analyzer 是一个具有一个方法的接口,意味着可以使用lambda表达式代替它。唯一定义的方法是 analyze(ImageProxy image) ,这就是lambda在这种情况下的实际表示。正如你所看到的 analyzeImageProxy .

相关问题