1

我如何告诉 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;
4

2 回答 2

1

由于编译时类型擦除,您的通用参数<T>在运行时不存在。正如您正确指出的那样,您不能这样做T.class,因为没有T.

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

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

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

return gson.fromJson(reader, type);
于 2013-10-11T11:44:28.487 回答
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;
 }

}

于 2013-10-11T12:20:00.803 回答