【发布时间】:2018-04-11 06:42:08
【问题描述】:
我们可以在 C# 中做到这一点:
private T getData<T>(Context context, String url, PostModel postModel) throws ApiException, IOException, ConnectionException {
Response response = new CallApi<T>(Connection.getApiUrl(context))
.Post(url, postModel);
if (response.code() != 200) throw new ApiException(context,response);
Gson gson = new GsonBuilder()
.setLenient()
.create();
T obj = gson.fromJson(response.body().charStream(),
new TypeToken<T>() {
}.getType());
return obj;
}
调用:
EmployeeModel model = getData<EmployeeModel>(context, url, null);
如您所见,我们在方法签名和方法内部声明了T,它在CallApi<T> 和new TypeToken<T> 中替换为EmployeeModel,它会返回EmployeeModel 对象作为结果。
在 Java(Android) 中,当我想使用这个泛型时,我有:
private <T> T getData(Context context, String url, PostModel postModel){...}
但它返回给我一个LinkedTreeMap 对象而不是EmployeeModel!当我将
我在网络和 StackOverflow 上搜索找到这种类型的使用,但文章只是关于如何将 T 转换为模型或如何将其作为参数传递。
请考虑我没有将
T作为参数传递给方法,我也没有 需要将T转换为任何东西。 T 被用作 type 在 other 泛型方法类型!
那么如何在 Java 中实现这个方法呢?
【问题讨论】: