如何从Json格式的文件反序列化通用对象

时间:2013-10-11 11:39:36

标签: java json generics gson

我如何告诉fromJson方法我需要返回T类型的对象? 我知道T.class是不可能的。

@Override
public T getById(String id) {
    File json = new File(folder, id);
    JsonReader reader = null;
    try {
        reader = new JsonReader(new FileReader(json.getPath()));
        return gson.fromJson(reader, T.class);
    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } finally {
        try {
            reader.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    return null;

2 个答案:

答案 0 :(得分:1)

由于compile time type erasure您的通用参数<T>在运行时不存在。正确指出,由于没有T.class,您无法T

为了做你想做的事,你需要请求一个与你的类型参数对应的Class对象的实例传递给方法:

public <T> T getById(final String id, final Class<T> type) {

这样你可以使用type变量传递给Gson方法

return gson.fromJson(reader, type);

答案 1 :(得分:0)

最终我做了通常的技巧(事实证明)。

public class GenericClass<T> {

 private final Class<T> type;

 public GenericClass(Class<T> type) {
      this.type = type;
 }

 public Class<T> getMyType() {
     return this.type;
 }

}