摘要
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表达式,我就不知道如何访问这个对象和关联的方法。
1条答案
按热度按时间eaf3rand1#
analysisUseCase
属于类型ImageAnalysis
并提供了一种方法setAnalyzer
有一个ImageAnalysis.Analyzer
作为第二个论点。那个
Analyzer
是一个具有一个方法的接口,意味着可以使用lambda表达式代替它。唯一定义的方法是analyze(ImageProxy image)
,这就是lambda在这种情况下的实际表示。正如你所看到的analyze
是ImageProxy
.