当前位置: 首页 > 知识库问答 >
问题:

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

阙俊友
2023-03-14

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

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, ?);
}

共有1个答案

充浩波
2023-03-14

你正在寻找的只是

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

如果有一种解决方案可以避免传递< code>Class对象,Gson早就使用它了。没有。要了解更多信息,请研究类型擦除。

 类似资料:
  • 问题内容: 我在理解Hibernate如何处理泛型时遇到一些麻烦,并且想知道实现我的目标的最佳方法。 给定一个简单的通用实体: 在进行hibernate初始化时,出现异常: 我几乎可以肯定,这是因为我没有给hibernate一些可能的限制条件。我知道你可以指定的东西,如上面的注释,但你失去使用泛型的灵活性。我可以使用注解限制可接受的泛型的范围吗?例如:如果我想要class ,该类从抽象类继承而来,

  • 无法从自定义类获取泛型类型列表(Turns): 它说:

  • 问题内容: 我有一个简单的示例,它似乎应该工作: 因此,我们有一个名为的类,它符合协议,并定义了一个可选的类方法。 但是,这一行: 导致错误: 类型名称后的预期成员名称或构造函数调用 知道我在做什么错吗? 编辑 从声明中删除单词并稍微更改函数可以使代码得以编译,但是现在我遇到了运行时错误,指出 “快速动态投放失败” 问题答案: 我无法解释为什么您的代码会导致运行时异常。但是,如果您更改函数原型,它

  • 问题内容: 更新: 感谢所有提供帮助的人-这个答案的答案在于我在更复杂的代码中没有注意到的内容以及对Java5协变量返回类型不了解的内容。 原始帖子: 今天早上我一直在玩一些东西。虽然我知道我 可以用 不同的方式解决整个问题,但我发现自己一直迷恋于弄清楚为什么它没有按我预期的那样工作。在花了一些时间阅读这些内容之后,我发现我离理解还很近,因此我将其作为一个问题来看看我是否只是愚蠢,或者是否真的有我

  • 想得到一些建议 我的班级结构是这样的 在我的主代码(MainProg)中,我试图使用相同的函数来引用服务类中的2个方法,并看到注释中的编译错误 有没有办法声明我的函数对象,以便可以使用相同的函数对象来引用采用不同类型参数的方法?

  • 本文向大家介绍Java泛型 T与T的使用方法详解,包括了Java泛型 T与T的使用方法详解的使用技巧和注意事项,需要的朋友参考一下 泛型(Generic type 或者 generics)是对 Java 语言的类型系统的一种扩展,以支持创建可以按类型进行参数化的类。可以把类型参数看作是使用参数化类型时指定的类型的一个占位符,就像方法的形式参数是运行时传递的值的占位符一样。 在集合框架(Collec