6

クラスを引数として渡す必要がありますが、ジェネリック型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
        ...
    }                       
}

ありがとう

4

3 に答える 3

6

Java型消去のおかげで、できません。

http://docs.oracle.com/javase/tutorial/java/generics/erasure.html

于 2012-08-21T15:57:18.853 に答える
3

実行時に生成することはできません。そのためGson#fromJson()、合格する必要があります。

于 2012-08-21T15:57:18.303 に答える
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
    ...
  }                       
}

次に、クライアントコードで:

Deserializer<String> d = Deserializer.newInstance(String.class);
于 2012-08-21T16:01:04.187 に答える