静态方法中的Java类型推断

时间:2014-02-28 10:45:34

标签: java static-methods type-inference

场景:我需要处理请求和响应场景,其中请求/响应的内部对象取决于请求代码。 所以我做了一个像下面这样的方法。

public static <T, U> Response getResponse(String requestCode, Request req) {
        Response response = new Response();

        T requestObject = (T) req.getInnerObject();

        RequestHandler<T, U> requestHandler = new RequestHandler<T, U>(
                requestCode, requestObject);

        U responseObject = requestHandler.getResponse();

        response.setInnerObject(responseObject);

        return response;
}

问题是,在调用此方法时如何指定T和U? 我很惊讶我能做到

Response response = getResponse(requestCode, req);

我哪里弄错了?

感谢。

2 个答案:

答案 0 :(得分:4)

要指定T和U,您可以像这样调用您的方法:

YourClass.<MyTClass, MyUClass>getResponse(requestCode, req);

致电Response response = getResponse(requestCode, req);与调用new ArrayList()而非new ArrayList<String>()一样有效。

答案 1 :(得分:2)

您正在使用generic method。通用方法是引入其自己的类型参数的方法。这类似于声明泛型类型,但类型参数的范围仅限于声明它的方法。允许使用静态和非静态泛型方法,以及泛型类构造函数。

要在代码中引用泛型方法,必须执行泛型类型调用,它将T和U替换为一些具体值,例如Integer:

SomeClass.<Integer, String>getResponse(requestCode, req);

有时,可以省略显式提供的类型,编译器将推断出所需的类型。此功能称为类型推断,允许您将普通方法作为普通方法调用,而无需在尖括号之间指定类型。阅读type inference了解更多信息。