重用静态方法进行函数映射

时间:2014-08-18 21:55:38

标签: java

使用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作为标记。

0 个答案:

没有答案