在函数返回之前不评估Lambda

时间:2016-11-18 15:21:04

标签: java

public Resposne some_function(){
Response resp =  null;
try{
           resp =  Response.ok().type(APPLICATION_ZIP).entity((StreamingOutput) out -> {
              //Some code here.
           }).header(CONTENT_DISPOSITION_HEADER, "ABC").build();
}catch()
{
}
return resp.
}

您好,

我有类似上面的功能。在函数some_function返回之前,不会计算传递给实体函数的lambda。看起来像Java 8功能。有什么可能发生的指针?还有,有办法强制进行评估吗?感谢。

2 个答案:

答案 0 :(得分:1)

Lambda表达式。 Funda-men-tally,lambda表达式只是编写方法的实现的一种较短方式,以便以后执行。

来源:http://www.oracle.com/technetwork/articles/java/architect-lambdas-part1-2080972.html

实施后,您需要执行:

some_function();

答案 1 :(得分:1)

据推测,您使用的是JAX-RS的ResponseBuilder类型。它有一个entity方法,可以接受Object。这个方法

  

在构建器中设置响应实体。

     

响应实体的任何Java类型实例,受其支持   运行时可以通过。

您已将StreamingOutput对象传递给它。

  

可用作资源方法返回值或类型的类型   当应用程序希望流输出时Response中的实体。   这是一个轻量级的替代品   javax.ws.rs.ext.MessageBodyWriter

JAX-RS将调用您的资源方法some_function(),并将收到一个Response对象作为回报。如果有,它将尝试序列化它。在内部,您的JAX-RS实现可能有一个知道如何处理StreamingOutput实体的处理程序。它所要做的就是调用write方法。

Lambda表达式评估包括创建相应功能接口的实例。在您的示例中,没有代码尚未调用该功能接口的方法。 JAX-RS最终会。