首页 文章

Codename One中的Android本机代码,lambda无效

提问于
浏览
1

使用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代码中它可以完美地工作吗?

任何帮助,赞赏,

1 回答

  • 1

    Lambdas是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

相关问题