我打电话的时候:
ArrayList<MyType> myobject = new Gson().fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());
一切正常,使用fromJson(String, Type)
我打电话的时候:
ArrayList<MyType> myobject = helper(data);
public ArrayList<MyType> helper(String data){
return new Gson().fromJson(data, new TypeToken<ArrayList<MyType>>(){}.getType());
}
它仍然可以正常工作,但是当我打电话时:
ArrayList<MyType> myobject = helper(data, MyType.class);
public <T> ArrayList<T> helper(String data, Class<T> type){
return new Gson().fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());
}
类型参数不合适 如何修复最后一段代码?
解
正如@LewsTherin所提议的那样,我只是给出来自来电者的确切类型参数 所以帮助声明是这样的:
public <T> ArrayList<T> helper(String data, Type type){
ArrayList<T> rtn = g.fromJson(data, type);
return rtn;
}
并打电话:
variable = helper(data, new TypeToken<ArrayList<MyType>>(){}.getType());
但如果有人可以编辑帮助函数来简化代码,我肯定会将其标记为正确!
答案 0 :(得分:1)
如果您在辅助函数中使用,我认为它不会起作用。解决方案可能是从调用方法传递类型。所以很明显发生了什么。
return new Gson().fromJson(data, new TypeToken<ArrayList<T>>(){}.getType());
这实际上并没有指定对象类类型。那为什么它不起作用?
答案 1 :(得分:1)
你可以解决这个问题的一种方法是从GSON解析你自己的列表:
private <S> List<S> readFromJson(Reader input, Class<S> type) {
JsonParser parser = new JsonParser();
JsonElement element = parser.parse(input);
ImmutableList.Builder<S> builder = ImmutableList.builder();
for (JsonElement jsonElement : element.getAsJsonArray()) {
builder.add(fromJson(jsonElement));
}
return builder.build();
}
private <S> S fromJson(JsonElement jsonElement, Class<S> type) {
return configReader.fromJson(jsonElement, type);
}
此外,GSON文档有一个类似于您要完成的示例:https://sites.google.com/site/gson/gson-user-guide#TOC-InstanceCreator-for-a-Parameterized