Java的消费者与回报[复制]

问题描述 投票:-1回答:1

我不明白为什么这个代码工作:

class Resource {
    private Resource() {
        System.out.println("created...");
    }
    public Resource op1() {
        System.out.println("op1");
        return this;
    }
    public Resource op2() {
        System.out.println("op2");
        return this;
    }
    private void close() {
        System.out.println("clean up...");
    }
    public static void use(Consumer<Resource> block) {
        Resource resource = new Resource();
        try {
            block.accept(resource);
        }
        finally {
            resource.close();
        }
    }
}

// method call

public class App 
{
    public static void main( String[] args )
    {
      Consumer<Resource> block = resource -> resource.op1().op2(); //here
      Resource.use(block);
    }
}

消费者应该接受一个参数,并返回void。但是,在这个例子中消费者取一个参数(资源),并返回该参数。为什么它是工作,尽管我回到资源实例,而不是无效?

java consumer
1个回答
0
投票

Consumer<Resource> block = resource -> resource.op1().op2();相当于:

Consumer<Resource> block = new Consumer<Resource>() {
        @Override
        public void accept(Resource resource) {
            resource.op1().op2();  // there is no return statement
        }
    };
© www.soinside.com 2019 - 2024. All rights reserved.