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

时间:2016-11-30 10:43:52

标签: java android codenameone

使用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 个答案:

答案 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