Java 函数映射的重用静态方法
使用Play,controller类具有以下几种模式的方法:Java 函数映射的重用静态方法,java,Java,使用Play,controller类具有以下几种模式的方法: public static Promise<Result> getFoo() { Promise<Response> resp = WS.url("/api/foo").get(); return resp.map(new Function<Response, Result>() { @Override public Result apply(Resp
public static Promise<Result> getFoo() {
Promise<Response> resp = WS.url("/api/foo").get();
return resp.map(new Function<Response, Result>() {
@Override
public Result apply(Response arg0) throws Throwable {
String body = arg0.getBody();
return Results.ok(body);
}
});
}
公共静态承诺getFoo(){
Promise resp=WS.url(“/api/foo”).get();
返回响应映射(新函数(){
@凌驾
公共结果应用(响应arg0)抛出可丢弃{
字符串body=arg0.getBody();
返回结果。ok(正文);
}
});
}
我考虑创建单独的映射函数:
private static Function<Response, Result> mapResponse = new Function<Response, Result>() {
@Override
public Result apply(Response arg0) throws Throwable {
String body = arg0.getBody();
return Results.ok(body);
}
};
私有静态函数mapResponse=新函数(){
@凌驾
公共结果应用(响应arg0)抛出可丢弃{
字符串body=arg0.getBody();
返回结果。ok(正文);
}
};
这样我就可以在多个静态方法中重用它:
public static Promise<Result> getFoo() {
Promise<Response> resp = WS.url("/api/foo").get();
return resp.map(mapResponse);
}
public static Promise<Result> getBar() {
Promise<Response> resp = WS.url("/api/bar").get();
return resp.map(mapResponse);
}
公共静态承诺getFoo(){
Promise resp=WS.url(“/api/foo”).get();
返回响应图(mapResponse);
}
公共静态承诺getBar(){
Promise resp=WS.url(“/api/bar”).get();
返回响应图(mapResponse);
}
直觉上,我认为这可能会导致问题,因为多个方法将重用同一个静态映射方法,但我意识到我不确定实际行为。我想知道重用静态变量是否会导致并发调用的瓶颈,或者JVM会自动实例化多个副本以处理不同方法的处理
这种方法的缺点是什么,或者它是否真的能正常工作?如果没有,我可以选择什么来减少多个方法中使用的样板映射代码
注意:我不认为上面的问题实际上是针对Play的,但更像是一个通用Java编码问题,因此没有将Play用作标记。我看不出有任何问题。为什么它不起作用?您在多个方法中重用一个无状态的、因而不可变的对象。不可变对象本质上是线程安全的。@JBNizet:我担心多个方法调用试图重用同一个函数变量-更新的问题表明了这一点。大多数情况下,我想这只是我以前没有使用过的情况,我不清楚JVM的行为:/