高分悬赏:Java语言new一个对象,我知道什么意思,但是new一个接口是什么意思呢,有什么作用

高分悬赏: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();
            }
        });