Java 如何在不使用Lambda的情况下编写此代码并使其仍能工作?
我试图在不使用lambdas的情况下将此代码转换为工作代码,以便更好地理解它,但我一点运气都没有。如何使用类似于按钮的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 =
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表达式只是接口的实现。你如何实现interfaceeventhandler也许你应该找到不使用lambdas的战舰代码。在线获取你不懂的代码,然后让其他人为你简化它并不是StackOverflow真正的用途。
class EventHandler$1 implements EventHandler<MouseEvent> {
public void handle(MouseEvent event) {
...
}
}
enemyBoard = new Board(true, new EventHandler$1());