我有以下方法,我试图使用一个通用的类:
public static <T> T fromJson(String serializedJson, Class<T> theClazz);
我想反序列化一个看起来像这样的类:
public class JsonContentWrapper<T> {
private String version;
private T content;
}
我通常使用fromJson
方法的方式如下:
JsonUtil.fromJson(someJsonString, JsonContentWrapper.class)
但是,由于JsonContentWrapper具有该通用对象content
,我真的希望能够做到:
JsonUtil.fromJson(someJsonString, JsonContentWrapper<SomeClass>.class)
但这并不奏效。有没有办法获得泛型类及其使用的泛型?我尝试了this之类的东西,但没有多少运气。
就目前而言,至少在我测试的对象中,T
对象被反序列化为LinkedHashMap
,这是错误的。
答案 0 :(得分:2)
Java使用Erasure实现泛型。这意味着在运行时,JVM无法知道哪些类型与Generic类/方法/对象/无关。可以使用hacks和变通方法来尝试使用它,但这是该语言的基本部分。
鉴于您正在使用JSON,您可能希望调查该库是否具有专用于通用数据结构的函数。我碰巧知道GSON has functions specific to handling Generic data structures。
这个事实