Tôi có một máy ảo chạy Windows XP SP3 32 bit. Trên máy này Tôi đã cài đặt Java SE JDK 8 build b44 Developer Preview từ here.Biểu thức Lambda không hoạt động trong Java 8?
Tôi cũng đã cài đặt JavaFX 2.1 SDK.
Nó hoạt động tốt:
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)
Tôi cố gắng chạy chương trình sau (lấy từ here):
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();
}
}
Chương trình biên dịch và chạy như mong đợi.
Tôi làm theo các hướng dẫn trong bài viết đó và thay thế nút mã sự kiện xử lý với điều này:
button.setOnAction((ActionEvent event)->
{
ToggleButton source = (ToggleButton) event.getSource();
if (source.isSelected())
{
btnText.set("Clicked!");
}
else
{
btnText.set("Click!");
}
});
Khi biên dịch, tôi nhận được lỗi sau (trên dòng button.setOnAction((ActionEvent event)->
):
> lambda expressions are not supported in -source 1.8
> (use -source 8 or higher to enable lambda expressions)
Tôi đã thêm đối số -source 8
, không có gì thay đổi.
Tất cả những gì tôi muốn là kiểm tra chức năng biểu thức lambda trong Java 8. Tại sao nó không hoạt động?
Có thể triển khai chưa hoàn tất. Bạn đã kiểm tra ghi chú phát hành chưa? Họ có nói rằng Lambdas nên làm việc không? Dù sao, đây là một cái gì đó bạn có lẽ nên thảo luận với các nhà phát triển Java ... bằng cách sử dụng các kênh phản hồi được cung cấp (bất kể chúng là gì). –
@StephenC Vâng, phiên bản JDK/JRE 8 này là phiên bản mới nhất tôi có thể tìm thấy (ngày phát hành: 21 tháng 6 năm 2012). Và tôi mất 20 giây để tìm mẫu mã đó, điều đó có nghĩa là có nhiều hơn ở đó. Tôi cho rằng họ nên làm việc, có thể không hoàn hảo nhưng ... tại sao tiếp tục phát hành phiên bản Preview Preview nếu tính năng quan trọng nhất là không tồn tại? –
Trình biên dịch phàn nàn rằng bạn có '-source 1.8' trong các đối số. Bạn đã chỉnh sửa đối số đó hay nghĩa đen là "thêm đối số' -source 8' "? Có thể là bạn không có toàn quyền kiểm soát dòng lệnh 'javac' để đối số không hợp lệ vẫn còn đó? –