0
我无法完全理解反射如何工作,所以我在尝试为我的GsonBuilder
注册自定义类型适配器时遇到了一些麻烦。获取通用类型的参数化类型
我需要为List<Something>
类型注册一个类型适配器。
这是一个工作代码:
gsonBuilder.registerTypeAdapter(
new TypeToken<List<MyClass>>() { }.getType(), new ListDeserializer(MyClass.class)
);
的事情是,我有很多的类注册我的类型的适配器,和我有一个ListDeserializer
和SingleDeserializer
适配器。
我想去通用,所以我只是调用一个函数,通过我的GsonBuilder
和类,然后你去。
这里是我的尝试:
private static <T> void registerTypeAdapter(GsonBuilder gsonBuilder, T clazz) {
gsonBuilder.registerTypeAdapter(clazz.getClass(), new SingleDeserializer(clazz.getClass()));
gsonBuilder.registerTypeAdapter(
new TypeToken<List<T>>() {
}.getType(), new ListDeserializer(clazz.getClass())
);
}
它不适合我的工作ListDeserializer
。我的猜测是,由于T
是List
的通用参数化类型,因此无法在运行时检测到它。
有什么建议吗?
这是真棒@varren!谢谢! –