高分悬赏:Java语言new一个对象,我知道什么意思,但是new一个接口是什么意思呢,有什么作用
接口是不能new的,你所看到的new实际上是跟的一个此接口的匿名实现,也就是一个具体的实现类,只不过这个类没有定义具体名称,对于一些重用度不高的代码可以这么使用,比较窗口程序里的某些事件响应,可能这段逻辑仅用于UI的更新,毫无重用的价值,但又必须实现某些接口,此时你就可以用匿名类了。
比如,JFX的鼠标事件,其事件回调的是一个EventHandler接口实现,但这种一处使用事件,没必要专门申明一个实现类,我们可以用匿名类简化事件代码,而且匿名类可以直接访问当前类的上下文,不需要通过构造函数和属性传来传去:
Button btn = new Button("Start");
btn.setFocusTraversable(false);
btn.setPrefWidth(98);
btn.setOnMouseClicked((e) -> {
reset();
data.randomShape();
started = true;
// render();
timerTask();
});
示例中用了Lamda表达式,实际就是:
Button btn = new Button("Start");
btn.setFocusTraversable(false);
btn.setPrefWidth(98);
btn.setOnMouseClicked(new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
reset();
data.randomShape();
started = true;
// render();
timerTask();
}
});