java - 在这种情况下如何为 GSON 指定通用类型

标签 java gson

我有以下代码来说明我的问题:

首先,我定义 Box 类和 Cat 类

public class Box<T> {
    private T data;

    public T getData() {
        return data;
    }

    public void setData(T data) {
        this.data = data;
    }
}
public class Cat {
    private String name;
    private Integer age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}

然后我定义GsonUtils (静态类),旨在将一些 json 字符串序列化为 Box<T> 的对象

public class GsonUtils {

    public static <T> Box<T> json2BoxObject(String json) {
        Type tpe = new TypeToken<Box<T>>(){}.getType();
        return  new GsonBuilder().create().fromJson(json, tpe);
    }

}
  1. 如果我可以提供 Cat输入 json2BoxObject方法,那么我会得到 Box<Cat>
  2. 如果我可以提供 Dog输入 json2BoxObject方法,那么我会得到 Box<Dog>

但是,我不知道如何向 json2BoxObject 提供类型,这就是我要问的问题

使用上面的代码,给出json2BoxObject带有 json 字符串 {"data":{"name":"Kitty","age":1}} ,我想要一个Box<Cat>对象,但我得到一个 Box[Map]

最佳答案

有时你需要提到猫或狗。我使用 Box 创建了 Type 并将其传递到 json2Java 方法中。

String msg ="{\"data\":{\"name\":\"Kitty\",\"age\":1}}";
Type type = new TypeToken<Box<Cat>>(){}.getType();
Box<Cat> obj = GsonUtils.json2Java(msg, type);
System.out.println(obj);

json2Java 方法是:

public static <T> Box<T> json2Java(String json, Type type) {
    Box<T> box = new GsonBuilder().create().fromJson(json, type);
    return box;
}

关于java - 在这种情况下如何为 GSON 指定通用类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45028117/

相关文章:

java - 具有 <ui :repeat> 的不同 div 标签 id

java - 在受控循环中调用端点

android - 改造发布空数据

java - 如何发送创建 JSON 字符串并将其从服务器发送到 android?

java - Gson : Iterating over fromJson result

java - Gson 具有静态类型或运行时类型

java - 页面链接读取参数 'context' 失败

java - Java 中的Character.isAlphabetic 和Character.isLetter 有什么区别?

java - Java 中的字符串索引超出范围

android:在sqlite数据库中缓存gson数据