java中的Lambda表达式无法正常工作

时间:2015-04-15 15:33:59

标签: java lambda

我尝试为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版本,但我刚刚更新并继续这样做,当我做一个java -version时,我给了我以下内容:

  

java -version   java版" 1.8.0_45"   Java(TM)SE运行时环境(版本1.8.0_45-b14)   Java HotSpot(TM)客户端VM(版本25.45-b02,混合模式)

所以,据我所知,它有一个与lambda表达兼容的版本,但没有成功使它们起作用,任何想法或建议他会发生什么?

编辑: 当我尝试编译时,我得到了这个:

Prueba.java:57: error: illegal start of expression
            boton.addActionListener(event -> System.out.println("Hello World !"));
                                           ^1 error

EDIT2: 我没有使用任何IDE,我从命令行编译

3 个答案:

答案 0 :(得分:9)

修改

根据您的意见,您没有使用任何IDE,而您的javac版本是1.7。您需要使用java 8进行编译,否则将无法识别lambda。


我会将此部分保留在我的答案中,因为它可能会解决其他人的问题,即使在这种情况下这不是解决方案。

你的lambda非常好。该错误可能是由于编译器合规性级别设置错误。

如果您使用eclipse,请参阅此文章以了解如何更改编译器合规性级别:

How to change JDK version for an Eclipse project

如果您使用Netbeans,请记住(这是许多人忘记的事情),如果您希望它正常运行,您必须将sourcelibraries目标设置为8。


<强>来源 enter image description here


<强>库

enter image description here

从命令行调用java -version并不意味着在IDE中设置了正确的库,因此您必须验证这一点。

如果您使用任何其他IDE,请google “如何更改YourIDE上的jdk版本”

答案 1 :(得分:5)

如果您有任何机会使用intellij,请确保项目语言级别设置为8 - Lambdas ..

enter image description here

答案 2 :(得分:2)

boton.addActionListener(event - &gt; System.out.println(“Hello World!”)); - Lambda Expression非常好。您正在将事件传递给ActionLerner函数接口的actionPerformed方法,该方法将在使用java 8编译器编译代码时进行映射。

请检查您的java版本。