如何解决如何定义此lambda表达式中的imageProxy参数?
摘要
如何在Google的MLKit Vision示例代码中的this lambda expression中定义imageProxy参数?
详细信息
我了解lamda表达式的基本概念,例如w3schools examples中给出的概念,以及Oracle examples中给出的更详细的示例,但我仍在努力理解MLKit中引用的表达式是如何之所以解决此问题,是因为它似乎与其他示例不同:
- 没有与analysisUseCase.setAnalyzer关联的变量声明,就像上面w3schools链接中的最后两个示例一样。所以我不知道如何通过调用某个变量在其他地方定义imageProxy,因为没有变量要引用。
- 根据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表达式的情况下,我不确定如何访问此对象和关联的方法。
解决方法
analysisUseCase
是ImageAnalysis
类型,并提供了以ImageAnalysis.Analyzer
作为第二个参数的方法setAnalyzer
。
Analyzer
是具有一种方法的接口,意味着可以在其位置使用lambda表达式。定义的唯一方法是analyze(ImageProxy image)
,这就是lambda在这种情况下的实际含义。如您所见,analyze
的一个参数是ImageProxy
。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。