[英]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,請參閱此文章以了解如何更改編譯器合規性級別:
如果您使用Netbeans,請記住(這是許多人忘記的事情),如果您希望它正常運行,您必須將source
和libraries
目標設置為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.