【问题标题】:Java consumer with return [duplicate]有回报的Java消费者[重复]
【发布时间】:2019-02-03 14:39:08
【问题描述】:

我不明白为什么这段代码有效:

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。但在此示例中,消费者采用一个参数(资源)并返回此参数。尽管我返回资源实例而不是 void,为什么它仍然有效?

【问题讨论】:

  • 因为您正在返回一个 Resource 实例。检查 op1 和 op2 方法的签名

标签: java consumer


【解决方案1】:

您的Consumer&lt;Resource&gt; block = resource -&gt; resource.op1().op2(); 相当于:

Consumer<Resource> block = new Consumer<Resource>() {
        @Override
        public void accept(Resource resource) {
            resource.op1().op2();  // there is no return statement
        }
    };

【讨论】:

  • 问题是关于 op1 和 op2 方法。甚至在问题中也这样表示
  • 方法 accept 的参数应该是类型 Resource 而不是 String 但我理解答案。谢谢。
猜你喜欢
  • 2019-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多