传递泛型Class <T>作为参数

zna*_*nat 6 java generics type-erasure

我需要传递一个Class作为参数,但我只有通用类型T.我如何推断泛型类并将其传递给fromJson()

public class Deserializer<T> implements JsonDeserializer<JsonList<T>> {
    public T someMethod(){
        ...
        T tag = gson.fromJson(obj, ???); // takes a class e.g. something.class
        ...
    }                       
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Ale*_*lex 2

假设Deserializer是您的类,执行此操作的典型方法是将Class作为构造函数参数:

public class Deserializer<T> implements JsonDeserializer<JsonList<T>> {

  public static <T> Deserializer<T> newInstance(Class<T> c) {
    return new Deserializer<T>(c);
  }

  private final Class<T> clazz;
  private Deserializer(Class<T> c) { this.clazz = c; }

  public T someMethod(){
    ...
    T tag = gson.fromJson(obj, clazz); // takes a class e.g. something.class
    ...
  }                       
}
Run Code Online (Sandbox Code Playgroud)

然后在客户端代码中:

Deserializer<String> d = Deserializer.newInstance(String.class);
Run Code Online (Sandbox Code Playgroud)

  • 为了让我们避免在客户端代码中重复参数类型,我们强烈建议使用工厂方法:“public static &lt;T&gt; Deserializer&lt;T&gt; newInstance(Class&lt;T&gt; c)”。 (2认同)