使用Play,控制器类有几种方法:
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);
}
});
}
我考虑过创建单独的映射函数:
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);
}
};
这样我就可以在多个静态方法中重用它:
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);
}
直觉上我认为这可能会导致问题,因为多个方法将重用相同的静态映射方法,但我意识到我不确定实际的行为。我想知道重用静态变量是否会阻塞并发调用,或者JVM会自动实例化多个副本以处理不同方法的处理。
这种方法的缺点是什么,或者它实际上是否正常工作?如果没有,我有哪些选择来减少多种方法中使用的样板映射代码?
注意:我不认为上面的问题实际上是Play特有的,但更多的是一般的Java编码问题,因此不使用Play作为标记。