2016-04-08 10 views
0

私はTypeTokenをメソッドに渡しています。以下のコードは動作しますが、具体的にはより具体的なものとしてObject listを明示的に定義しないと後で気になることがありますが、コンパイラのエラーや警告を出さずに定義する方法を見つけることができません。ここでTypeTokensをJavaでキャスティングするにはどうすればよいですか?

TypeToken<List<ServerInfo>> listTypeToken = new TypeToken<List<ServerInfo>>(){}; 

は私がTypeTokenを使用していますコードです:ここでは(listTypeToken.getType()) list = ...

ような何かを行う方法があるはずのように私はTypeTokenを定義するコードであるようです。私はObject listをより具体的なものとしてキャストすべきだと思います。ここで

public static <T> void processJson(GsonBuilder gsonBuilder, 
            String jsonString, 
            String action, 
            TypeToken<T> listTypeToken) 
{ 
    //Trimmed from brevity 
    Object list = gson.fromJson(jobject.get(action).getAsJsonArray(), 
           listTypeToken.getType()); 
} 

は、他の成功したアプローチの一つであるが、私はそれが適切なコースだかはわからない:

@SuppressWarning("rawtypes") 
List list = gson.fromJson(jobject.get(action).getAsJsonArray(), 
           listTypeToken.getType()); 
+0

あなたはそれがリストの一覧を表示させることはできません= gson.fromJson(jobject.get (アクション).getAsJsonArray()、 listTypeToken.getType()); ? – Sampada

+0

ServerInfoは、渡すことができる約50のクラスのうちの1つに過ぎません。私がTokenTypeコーディングから取り除こうとしていたのは、実際にはそのような静的コーディングでしたので、そのプロセスをメソッドにプッシュすることができました。 – lumberajackshaw

答えて

1

fromJsonTを返しますので、正しい方法はこのようになります:

T list = gson.fromJson(jobject.get(action).getAsJsonArray(), 
           listTypeToken.getType()); 

が常にサブタイプがListであることが確かな場合は、宣言子に制約を指定する必要があります

public static <T extends List<?>> void processJson(...) 

あるいはおそらくこれ、あなたがListの要素を操作できます:メソッドのエーション

public static <E, T extends List<E>> void processJson(...) 
関連する問題