簡體   English   中英

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版本,但我剛剛更新並繼續做同樣的事情,當我做一個java -version我給了我以下內容:

java -version java version“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

編輯2:我沒有使用任何IDE,我從命令行編譯

編輯

根據您的意見,您沒有使用任何IDE,您的javac版本是1.7。 您需要使用java 8進行編譯,否則將無法識別lambda。


我將把這一部分保留在我的答案中,因為它可以解決其他人的問題,即使這不是這種情況下的解決方案。

你的lambda非常好。 該錯誤可能是由於編譯器合規性級別設置錯誤。

如果您使用eclipse,請參閱此文章以了解如何更改編譯器合規性級別:

如何更改Eclipse項目的JDK版本

如果您使用Netbeans,請記住(這是許多人忘記的事情),如果您希望它正常運行,您必須將sourcelibraries目標設置為8。


資源 在此輸入圖像描述


圖書館

在此輸入圖像描述

從命令行調用java -version並不意味着在IDE中設置了正確的庫,因此您必須驗證這一點。

如果你使用任何其他IDE,那么請谷歌“如何在YourIDE上更改jdk版本”

如果您有任何機會使用intellij,請確保項目語言級別設置為8 - Lambdas ..

在此輸入圖像描述

boton.addActionListener(event - > System.out.println(“Hello World!”)); - Lambda Expression非常好。 您正在將事件傳遞給ActionLerner函數接口的actionPerformed方法,該方法將在使用java 8編譯器編譯代碼時進行映射。

請檢查您的Java版本。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM