从类名获取字符串形式的Gson TypeToken

polkgigr  于 2022-11-23  发布在  其他
关注(0)|答案(1)|浏览(206)

我想做类似这样的事情-使用Gson反序列化一个泛型类型的类。下面的代码工作起来很有魅力。

Type type = new TypeToken<ActionTask<UptimeAction>>() {}.getType();

ActionTask task = (ActionTask) gson.fromJson(json, type);

但是如果类型是以String的形式提供的呢?

String className = "UptimeAction";

Type type = ... // get the type somehow

ActionTask task = (ActionTask) gson.fromJson(json, type);

这可能吗?

cczfrluj

cczfrluj1#

基于Guava文档,您可以创建如下方法:

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));

相关问题