【问题标题】:Getting Gson TypeToken from class name as a String从类名中获取 Gson TypeToken 作为字符串
【发布时间】:2018-01-12 21:19:44
【问题描述】:

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

这可能吗?

【问题讨论】:

  • 在这种情况下是什么类名,相关性?

标签: java reflection gson typetoken


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-08-05
    • 2023-03-04
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多