[英]Lambda expressions don't work in Java 8?
我有一台运行Windows XP SP3 32位的虚拟机。 在这台机器上,我从这里安装了Java SE JDK 8 build b44 Developer Preview。
我还安装了JavaFX 2.1 SDK。
它工作正常:
java -version
> java version "1.8.0-ea"
> Java(TM) SE Runtime Environment (build 1.8.0-ea-b44)
> Java HotSpot(TM) Client VM (build 24.0-b14, mixed mode, sharing)
我尝试运行以下程序(取自此处 ):
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.ButtonBase;
import javafx.scene.control.ToggleButton;
import javafx.scene.control.ToggleButtonBuilder;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;
public class LambdasWithJavaFx extends Application
{
public static void main(String[] args)
{
Application.launch(args);
}
@Override public void start(Stage stage) throws Exception
{
BorderPane root = new BorderPane();
ToggleButton button = new ToggleButton("Click");
final StringProperty btnText = button.textProperty();
button.setOnAction(new EventHandler<ActionEvent>()
{
@Override public void handle(ActionEvent actionEvent)
{
ToggleButton source = (ToggleButton) actionEvent.getSource();
if (source.isSelected())
{
btnText.set("Clicked!");
}
else
{
btnText.set("Click!");
}
}
});
root.setCenter(button);
Scene scene = new Scene(root);
stage.setScene(scene);
stage.setWidth(200);
stage.setHeight(200);
stage.show();
}
}
该程序按预期编译和运行。
我按照那篇文章中的说明操作,并将按钮事件处理代码替换为:
button.setOnAction((ActionEvent event)->
{
ToggleButton source = (ToggleButton) event.getSource();
if (source.isSelected())
{
btnText.set("Clicked!");
}
else
{
btnText.set("Click!");
}
});
编译时,我得到以下错误(在行button.setOnAction((ActionEvent event)->
)上:
> lambda expressions are not supported in -source 1.8
> (use -source 8 or higher to enable lambda expressions)
我添加了参数-source 8
,没有任何改变。
我想要的只是检查Java 8中的lambda表达式功能。为什么它不起作用?
您需要下载包含Lambda表达式功能的二进制文件。 尝试从这里下载http://jdk8.java.net/lambda/ 。 我记得在邮件列表中读到lambda表达式分支正在主JDK8构建中合并,但不确定它是否已完成。 但我使用Lambda项目页面中的构建。
作为http://jdk8.java.net/lambda/版本的替代版本,还有来自http://jdk8.java.net/download的 dmg,exe安装程序和tar.gz表单中提供的JDK8和JRE8快照版本。 .html 。
这些jdk8开发人员快照现在还包括lambda(和javafx8)功能。 在撰写本文时,jdk8的lambda和javafx仍然处于功能和bug修复开发模式。
我发现http://jdk8.java.net/download.html每周构建对于开发很有用和可用(使用它们的程序偶尔会在我的mac上崩溃,所以即使是你想要部署到生产中的东西也绝对不是构建的oracle许可证允许,但他们没有这样做。
如果您想要绝对最新的前沿或自定义的jdk构建,您可以使用obuildfactory构建自己的。 这样的构建使用OpenJDK许可模型而不是Oracle JDK许可模型,这对于某些开发项目来说可能更适合,但是,就个人而言,我坚持使用Oracle JDK构建。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.