我们可以在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
并在方法内部,将其替换为EmployeeModel
和CallApi<T>
中的new TypeToken<T>
,它将返回{{1}作为结果的对象。
在Java(Android)中,当我想使用这个泛型时,我有:
EmployeeModel
但是它返回一个private <T> T getData(Context context, String url, PostModel postModel){...}
对象,而不是LinkedTreeMap
!当我移动&lt; T>从方法签名到类本身的结果也一样。
我搜索网络和StackOverflow以找到这种类型的使用,但文章只是关于如何将EmployeeModel
转换为模型或如何将其作为参数传递。
请注意我没有将
T
作为参数传递给方法而我不会 需要将T
投射到任何东西上。 T在其他地方用作类型 通用方法类型!
那么如何在Java中实现这个方法呢?
答案 0 :(得分:4)
new TypeToken<T>() {}
不会像你想要的那样工作。
您必须传递TypeToken<T>
作为参数:
EmployeeModel model = getData(
context, url, null, new TypeToken<EmployeeModel>() {});
更改方法签名以添加额外参数;然后:
T obj = gson.fromJson(response.body().charStream(), typeToken);