场景:我需要处理请求和响应场景,其中请求/响应的内部对象取决于请求代码。 所以我做了一个像下面这样的方法。
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);
我哪里弄错了?
感谢。
答案 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了解更多信息。