静态方法中的Java类型推断
场景:我需要处理一个请求和响应场景,其中请求/响应的内部对象取决于请求代码。 所以我用了下面的方法
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);
我哪里弄错了
谢谢
# 1 楼答案
要指定T和U,可以如下方式调用方法:
调用
Response response = getResponse(requestCode, req);
与调用new ArrayList()
而不是new ArrayList<String>()
一样有效# 2 楼答案
您正在使用
generic method
。泛型方法是引入自己类型参数的方法。这类似于声明泛型类型,但类型参数的作用域仅限于声明它的方法。允许使用静态和非静态泛型方法以及泛型类构造函数要在代码中引用泛型方法,必须执行泛型类型调用,该调用使用一些具体值替换T和U,例如Integer:
有时,可以忽略显式提供的类型,编译器将推断出所需的类型。此功能称为类型推断,允许您将泛型方法作为普通方法调用,而无需在尖括号之间指定类型。阅读关于type inference的文章,了解更多信息