java 中的 Lambda 表达式不起作用
Lambda expression in java not working
我正在尝试为 ActionListener 制作一个 lambda 表达式,但它给了我一个 IllegalStart 表达式,到目前为止我正在尝试 运行 看起来像这样:
JFrame frame = new JFrame();
JButton boton = new JButton("Lambda Button");
boton.addActionListener(event -> System.out.println("Hello World!"));
frame.add(boton);
frame.setVisible(true);
另一方面,当我改用这段代码时:
JFrame frame = new JFrame();
JButton boton = new JButton("Lambda Button");
boton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("Hello World!");
}
} );
frame.add(boton);
frame.setVisible(true);
它工作得很好,
最初我认为问题可能是 java 的版本,我正在 运行ning,但我刚刚更新并继续做同样的事情,当我做 java -我给了我以下版本:
java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode)
所以,据我所知,它有一个与 lambda 表达式兼容的版本,但没有成功使它们工作,关于他会发生什么的任何想法或建议?
编辑:
当我尝试编译时,我得到了这个:
Prueba.java:57: error: illegal start of expression
boton.addActionListener(event -> System.out.println("Hello World !"));
^1 error
编辑2:
我没有使用任何 IDE,我是从命令行编译的
编辑
根据您的评论,您没有使用任何 IDE 并且您的 javac
版本是 1.7。您需要使用 java 8 进行编译,否则将无法识别 lambda。
我会将这部分保留在我的回答中,因为它可能会为其他人解决问题,即使这不是本例中的解决方案。
你的 lambda 完全没问题。该错误可能是由于错误的编译器合规性级别设置造成的。
如果您使用 eclipse,请参阅此 post 了解如何更改编译器兼容级别:
How to change JDK version for an Eclipse project
如果您使用 Netbeans,请记住(很多人忘记了这一点)如果您希望它正常运行,您必须将 source
和 libraries
目标都设置为 8。
来源
图书馆
从命令行调用 java -version
并不意味着 IDE 中设置了正确的库,因此您必须验证这一点。
如果你使用任何其他 IDE 那么 google "How to change jdk version on YourIDE".
如果您有机会使用 intellij,请确保项目语言级别设置为 8 - Lambdas..
boton.addActionListener(事件 -> System.out.println("Hello World!")); - Lambda 表达式非常好。您正在将事件传递给 ActionListener 功能接口的 actionPerformed 方法,该方法将在使用 java 8 编译器编译代码时进行映射。
请检查您的 java 版本。
我正在尝试为 ActionListener 制作一个 lambda 表达式,但它给了我一个 IllegalStart 表达式,到目前为止我正在尝试 运行 看起来像这样:
JFrame frame = new JFrame();
JButton boton = new JButton("Lambda Button");
boton.addActionListener(event -> System.out.println("Hello World!"));
frame.add(boton);
frame.setVisible(true);
另一方面,当我改用这段代码时:
JFrame frame = new JFrame();
JButton boton = new JButton("Lambda Button");
boton.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent e)
{
System.out.println("Hello World!");
}
} );
frame.add(boton);
frame.setVisible(true);
它工作得很好,
最初我认为问题可能是 java 的版本,我正在 运行ning,但我刚刚更新并继续做同样的事情,当我做 java -我给了我以下版本:
java -version java version "1.8.0_45" Java(TM) SE Runtime Environment (build 1.8.0_45-b14) Java HotSpot(TM) Client VM (build 25.45-b02, mixed mode)
所以,据我所知,它有一个与 lambda 表达式兼容的版本,但没有成功使它们工作,关于他会发生什么的任何想法或建议?
编辑: 当我尝试编译时,我得到了这个:
Prueba.java:57: error: illegal start of expression
boton.addActionListener(event -> System.out.println("Hello World !"));
^1 error
编辑2: 我没有使用任何 IDE,我是从命令行编译的
编辑
根据您的评论,您没有使用任何 IDE 并且您的 javac
版本是 1.7。您需要使用 java 8 进行编译,否则将无法识别 lambda。
我会将这部分保留在我的回答中,因为它可能会为其他人解决问题,即使这不是本例中的解决方案。
你的 lambda 完全没问题。该错误可能是由于错误的编译器合规性级别设置造成的。
如果您使用 eclipse,请参阅此 post 了解如何更改编译器兼容级别:
How to change JDK version for an Eclipse project
如果您使用 Netbeans,请记住(很多人忘记了这一点)如果您希望它正常运行,您必须将 source
和 libraries
目标都设置为 8。
来源
图书馆
从命令行调用 java -version
并不意味着 IDE 中设置了正确的库,因此您必须验证这一点。
如果你使用任何其他 IDE 那么 google "How to change jdk version on YourIDE".
如果您有机会使用 intellij,请确保项目语言级别设置为 8 - Lambdas..
boton.addActionListener(事件 -> System.out.println("Hello World!")); - Lambda 表达式非常好。您正在将事件传递给 ActionListener 功能接口的 actionPerformed 方法,该方法将在使用 java 8 编译器编译代码时进行映射。
请检查您的 java 版本。