使用Codename One构建的我的应用程序具有相机预览功能。我需要使用Native Interface实现(到目前为止Android)来显示此预览。在某些(较旧的)Android设备上,我还需要拨打Camera.autofocus(AutofocusCallback)
进行精确预览。
Android studio建议我使用lambda表达式来定义回调:
mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
当我调试我的项目时,它会颤抖。
但是当我在Codename One本地接口实现中复制粘贴这段代码并发送Android版本时,构建过程失败并出现以下错误:
error: ')' expected
mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
^
error: illegal start of expression
mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
^
error: ';' expected
mCamera.autoFocus((b, camera) -> Log.d(TAG, "Camera may have focused"));
要获得构建,我必须将lambda转换为更传统的:
mCamera.autoFocus(new Camera.AutoFocusCallback() {
@Override
public void onAutoFocus(boolean b, Camera camera) {
Log.d(TAG, "Camera may have focused");
}
});
我不能在本机接口实现中使用lambda,而在Codename One代码中它可以完美运行吗?
任何帮助表示赞赏,
答案 0 :(得分:1)
Lambda是Java 8的功能。您的代号是一个项目是Java 8项目吗?文档建议您必须通过将build.xml中的“source”和“target”值设置为1.8以及设置构建提示java.version = 8来显式启用Java 8。 还有一些其他建议检查您的ide使用的java版本: https://www.codenameone.com/blog/java-8-support.html