我想做这样的事情-使用Gson反序列化具有泛型类型的类。下面的代码就像一个魅力。
Type type = new TypeToken<ActionTask<UptimeAction>>() {}.getType();
ActionTask task = (ActionTask) gson.fromJson(json, type);
但是,如果将类型作为字符串提供怎么办?我想像下面的事情。
String className = "UptimeAction";
Type type = ... // get the type somehow
ActionTask task = (ActionTask) gson.fromJson(json, type);
这有可能吗?
最佳答案
基于Guava docs,您可以创建如下方法:
static <T> Type mapActionTask(Class<T> innerType) {
return new TypeToken<ActionTask<T>>() {}
.where(new TypeParameter<T>() {}, innerType)
.getType();
}
并这样称呼它:
String className = "com.foo.UptimeAction";
Type type = mapActionTask(Class.forName(className));