gpt4 book ai didi

java - 在 GSON 中使用泛型

转载 作者:IT老高 更新时间:2023-10-28 20:47:26 25 4
gpt4 key购买 nike

我正在使用 GSON 将 JSON 解码为 T 类型的对象,例如

public T decode(String json) {
Gson gson = new Gson();
return gson.fromJson(json, new TypeToken<T>() {}.getType());
}

然而这会返回一个异常 -

java.lang.AssertionError:意外类型。预期之一:java.lang.reflect.ParameterizedType,java.lang.reflect.GenericArrayType,但得到:sun.reflect.generics.reflectiveObjects.TypeVariableImpl,对于类型标记:T

我认为通过使用 TypeToken 我避免了类型删除。

我错了吗?

谢谢

最佳答案

首先,我看不出这样包装 Gson 有什么用。

关于你的问题,关于泛型类型的信息T本身在运行时不可用。它已被抹去。它仅在编译期间可用。你想用实际类型参数化它,而不是像 new TypeToken<List<String>> .

由于 Java 中缺乏具体化的泛型(不可能执行 T t = new T() ),Gson 本身被迫使用 TypeToken接近,如你所见。否则 Gson 会以更优雅的方式完成它。

为了能够传递实际类型,您必须重新发明与 TypeToken 相同的东西已经在做。这没有任何意义:) 只是重用它或直接使用 Gson 而不将它包装在类似的帮助类中。

关于java - 在 GSON 中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4226738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com