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功能。有什么可能发生的指针?还有,有办法强制进行评估吗?感谢。
答案 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最终会。