Gson通用的界面集合

时间:2014-06-04 12:59:41

标签: java generics serialization deserialization gson

我将Serializable作为自定义界面使用以下方法:

private <T extends Synchronizable> Collection<T> deserialize(String json, Class<T> type) {
  Type collectionType = new TypeToken<ArrayList<T>>(){}.getType();
  return new Gson().fromJson(json, collectionType);
}

此方法无法正常工作,因为Gson期望类型标记属于特定的泛型类型,例如Type collectionType = new TypeToken<ArrayList<Group>>(){}.getType();Group实施Serializable)。

有没有人知道这个问题的解决方案,或者我不能在这个地方使用通用方法,这会很尴尬。

1 个答案:

答案 0 :(得分:0)

您应该使用您在其中接受的type参数,如:

  private <T extends Synchronizable> Collection<T> deserialize(String json, Class<T> type){
        Type collectionType = new TypeToken<ArrayList<Class<T>>>(){}.getType();
         return new Gson().fromJson(json, collectionType);
  }