我有一个可以返回几种不同类型对象的服务器,我正在使用GSON的fromJson来尝试处理它。所以我想编写一个方法,将GET发送到服务器并将结果解析为正确类型的对象。基本上我希望能够做到
Foo foo = getStuff("foo_url");
或
Bar[] bars = getStuff("bar_url");
并让它正常工作。所以这就是我到目前为止所获得的(“get”函数在别处定义并向给定的URL发送HTTP GET请求并返回响应):
<T> T getStuff(String url) throws IOException {
CloseableHttpResponse response = get(url);
String body = EntityUtils.toString(response.getEntity());
response.close();
return gson.fromJson(body, /* ???? */);
}
所以我需要更换/ * ???? * /使用一个表示T的Class对象,这样getStuff会给我一个T.它只能将T
放在那里,new Class<T>().class
也不行,所以我没有黑客攻击
我可以这样做吗?
答案 0 :(得分:2)
不。到执行该方法时,类型参数已为erased。没有关于类型参数的信息在运行时存储或在编译时被烘焙到字节码中;例如,编译器不会在您的方法中秘密添加额外的参数,并在调用站点传递Foo.class
。你必须亲自通过课程。