Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 函数映射的重用静态方法_Java - Fatal编程技术网

Java 函数映射的重用静态方法

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

使用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(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的行为:/