Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不使用Lambda的情况下编写此代码并使其仍能工作?_Java_Lambda_Actionevent - Fatal编程技术网

Java 如何在不使用Lambda的情况下编写此代码并使其仍能工作?

Java 如何在不使用Lambda的情况下编写此代码并使其仍能工作?,java,lambda,actionevent,Java,Lambda,Actionevent,我试图在不使用lambdas的情况下将此代码转换为工作代码,以便更好地理解它,但我一点运气都没有。如何使用类似于按钮的ActionEvents编写它 enemyBoard = new Board(true, event -> { if (!running) return; Cell cell = (Cell) event.getSource(); if (cell.wasShot) return; enemyTurn =

我试图在不使用lambdas的情况下将此代码转换为工作代码,以便更好地理解它,但我一点运气都没有。如何使用类似于按钮的
ActionEvent
s编写它

enemyBoard = new Board(true, event -> {
    if (!running)
        return;

    Cell cell = (Cell) event.getSource();
    if (cell.wasShot)
        return;

    enemyTurn = !cell.shoot();

    if (enemyBoard.ships == 0) {
        System.out.println("YOU WIN");
        System.exit(0);
    }

    if (enemyTurn)
        enemyMove();
});
这是
构造器:

public Board(boolean enemy, EventHandler<? super MouseEvent> handler) {
    this.enemy = enemy;
    for (int y = 0; y < 10; y++) {
        HBox row = new HBox();
        for (int x = 0; x < 10; x++) {
            Cell c = new Cell(x, y, this);
            c.setOnMouseClicked(handler);
            row.getChildren().add(c);
        }

        rows.getChildren().add(row);
    }

    getChildren().add(rows);
}
公共板(布尔型敌人,EventHandler)
lambda是实现的一种简写方式,它是一个
接口
,具有单个(非
默认
)方法。没有lambda的等效代码是:

enemyBoard = new Board(true, new EventHandler<MouseEvent>() {
    public void handle(MouseEvent event) {
        ...
    }
});
请注意,
EventHandler$1
是一个自动生成的类名,保证不会与任何其他实际类冲突。编译器使用在最终用户代码中不合法的
$
字符来命名该类,这样就不会发生冲突。如果您在堆栈跟踪中看到过带有美元符号的类名,则这就是它们的来源:匿名类

†事实上,它更为复杂。lambda并不总是对匿名类进行解糖。通常编译器可以做一些更有效的事情。但从概念上讲,将它们视为匿名类是一种很好的心理翻译方法

lambda是实现的一种简写方式,它是一个
接口
,具有单个(非
默认
)方法。没有lambda的等效代码是:

enemyBoard = new Board(true, new EventHandler<MouseEvent>() {
    public void handle(MouseEvent event) {
        ...
    }
});
请注意,
EventHandler$1
是一个自动生成的类名,保证不会与任何其他实际类冲突。编译器使用在最终用户代码中不合法的
$
字符来命名该类,这样就不会发生冲突。如果您在堆栈跟踪中看到过带有美元符号的类名,则这就是它们的来源:匿名类


†事实上,它更复杂。lambda并不总是对匿名类进行解糖。通常编译器可以做一些更有效的事情。但从概念上讲,将它们视为匿名类是一种很好的心理翻译方法。

lambda表达式只是一个接口的实现。如何你能否实现接口
eventhandler也许你应该找到不使用lambdas的战舰代码。在线获取你不理解的代码,然后让其他人为你简化它并不是StackOverflow的真正目的。lambda表达式只是接口的实现。你如何实现interface
eventhandler也许你应该找到不使用lambdas的战舰代码。在线获取你不懂的代码,然后让其他人为你简化它并不是StackOverflow真正的用途。
class EventHandler$1 implements EventHandler<MouseEvent> {
    public void handle(MouseEvent event) {
        ...
    }
}
enemyBoard = new Board(true, new EventHandler$1());