我想做这样的事情-使用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));

07-26 09:12