我有这个代码:

Task.doTask(new Runnable(){
    int bound = 0;
    @Override
    public void run(){
        switch (bound){
            case 0:
                break;
            case 1:
                finishTask();
                break;
        }
        bound++;
    }
    });


我可以将启动int绑定到其中,并轻松地将其用作进度条

    Task.doTask(() ->{
        int bound = 0;
        switch (bound){
            case 0:
                break;
            case 1:
                finishTask();
                break;
        }
        bound++;
    });


但是使用lambda时,我无法启动绑定,因此它始终为0;

最佳答案

这是因为lambda的主体在传递给run方法的Runnable实例内部定义了doTask方法。

我不会称其为限制-lambda只是传递一方法类实例的语法简写。

如果需要成员变量,请使用旧方法,如第一个示例中那样。

10-08 00:56