2016-08-25 23 views
0
public <T> void getJsonObject(String res, RequestCallBack<T> callBack) { 
    T result; 
    if (res != null) { 
     ObjectMapper mapper = new ObjectMapper(); 
     try { 
      result = mapper.readValue(res, new TypeReference<T>() {}); 
      callBack.onSuccess(result); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

を使用することはできません、それは私が何をすべき、結果は私が欲しいものではありませんマッパーにTを送信することはできませんか?サイドノートでは私はJSONに文字列をデシリアライズするためにコールバック<T>て欲しい、と私はこれを書いたが、私は

+0

Tは型ではありません。実際のクラスを指定する必要があります。それ以外の場合は、予期しない結果をもたらすTypeReference と同じです。 –

+0

実際には、それはhttp://stackoverflow.com/questions/11664894/jackson-deserialize-using-generic-class –

+0

の重複することができますが、私はRequestCallBackを介してしたい場合は、文字列をデシリアライズする結果を得る方法それを書くには? –

答えて

0

ライブラリの多くは、クラスを渡すために、発信者を義務付けることにより、型消去を回避する。

public <T> void getJsonObject(String res, RequestCallBack<T> callBack, Class<T> clazz) { 
    T result; 
    if (res != null) { 
     ObjectMapper mapper = new ObjectMapper(); 
     try { 
      result = mapper.readValue(res, clazz); 
      callBack.onSuccess(result); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 

、あなたはおそらくコールごとに新しいObjectMapperを作成すべきではない(それ高価な操作になる可能性があります)。私は1つの静的なものを作成することをお勧めします。

+0

ありがとう、私はそれを解決するために別の方法を使用して、私はRequestCallbackの文字列をdeserializeので、私はTの型を取得し、それをデシリアライズすることができます。 –

関連する問題