繁体   English   中英

如何将 gson.fromJson 与泛型 T 一起使用

[英]how to use gson.fromJson with generic type T

我正在尝试构建一个通用方法,它将调用任何 API 特定端点,每个端点都返回自己的 object 类型。

private  <T> T callApi(String endpoint) {
  T responseSuccessObject = null;
  String responseBody = ...
  responseSuccessObject = (T) gson.fromJson(responseBody, responseSuccessObject.getClass());
}

以上不起作用(因 null 指针异常而失败)

也试过这个:

private  <T> T callApi(String endpoint) {
  T responseSuccessObject = (T) new Object();
  String responseBody = ...
  responseSuccessObject = (T) gson.fromJson(responseBody, responseSuccessObject.getClass());
}

这失败了:

com.xx.AuthResponseModel is in unnamed module of loader org.apache.felix.framework.BundleWiringImpl$BundleClassLoader @58bd8c78)

我已经看到了一个可能的解决方案,方法是传入所需的 class 的虚拟 object,但这不是一个理想的选择,因为它需要添加类型参数并将其传递到一长串调用中。

不知道这将如何工作。

private  <T> T callApi(Class<T> type, String endpoint) {
  T responseSuccessObject = null;
  String responseBody = ...
  responseSuccessObject = (T) gson.fromJson(responseBody, ?);
}

你要找的只是

private  <T> T callApi(Class<T> type, String endpoint) {
  T responseSuccessObject = null;
  String responseBody = ...
  responseSuccessObject = (T) gson.fromJson(responseBody, type);
}

如果有避免传递Class object 的解决方案,Gson 已经使用它。 没有。 要了解更多信息,请研究类型擦除

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM