【发布时间】:2017-07-11 07:31:03
【问题描述】:
我有以下代码来说明我的问题:
首先,我定义了 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);
}
}
- 如果我可以为
json2BoxObject方法提供Cat类型,那么我会得到Box<Cat> - 如果我可以为
json2BoxObject方法提供一个Dog类型,那么我会得到一个Box<Dog>
但是,我不知道如何为json2BoxObject 提供类型,这是我要问的问题
用上面的代码,给json2BoxObject和json字符串{"data":{"name":"Kitty","age":1}},我想得到一个Box<Cat>对象,但是我得到一个Box[Map]
【问题讨论】:
-
我不确定我是否得到了你需要的东西,但你可能还需要将类型传递给
json2java,所以你的方法看起来像json2Java(String json, Type t)并使用这个type参数在.create().fromJson(json, type);[注意:不要再使用tpe] -
想要添加,如果您正在创建
GsonUtils的实例来调用 json2java,那么如果您将类型参数添加到类GsonUtils <T>这也可以解决问题,但您是不实例化它,因为 json2java 是静态的,对吧? -
@Yazan。谢谢你的cmets。对于您的评论#2,我希望 GsonUtil 是静态的,即
json2Java是一种静态方法,所以我认为GsonUtils[T]没有意义。对于您的评论 #1,是的,我可以将类型作为第二个参数传递给 json2Java,类型应该是Type tpe = new TypeToken<Box<Cat>>() {}.getType();but 那是我不想定义我的方法..我想限制 json可以反序列化为 Box 的东西,如果我传递类型Cat,那么我会得到一个 Box -
我不明白你的 约束 你仍然会得到 Box
这意味着不仅 Box 如果你的意思是这样,你能解释更多吗? -
@Yazan。感谢您的评论,我完善了我的问题,希望这能让我的意思清楚