如何将gson.fromJson与泛型类型测试一起使用

pieyvz9o  于 2022-11-06  发布在  其他
关注(0)|答案(1)|浏览(181)

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

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

以上操作不起作用(失败,出现空指针异常)
也试过这个:

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)

我看到了一个可能的解决方案,即传入所需类的一个伪对象,但这不是一个理想的选择,因为它需要在一长串调用中添加和传递类型参数。
不知道这是怎么回事。

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

83qze16e1#

你要找的只是

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

如果有一个解决方案可以避免沿着Class对象,Gson早就使用它了。没有。要了解更多信息,请研究type erasure

相关问题