2017-10-11 2 views
0

GSONを使用してokhttp応答オブジェクトを解析しています。ジェネリック<T>のクラス初期化中にタイプインタフェースを使用する方法

一般的な解析ロジックを可能にするために、setType(型の型)を使用して応答の一種を渡し、次にすべての応答を解析するために以下のコードを使用しました。

Object mResponse = mGson.fromJson(response.body().string(), mType); 

このコードは変更されていないため、このクラスを拡張して解析応答メソッドをオーバーライドしました。また、MyResposeという新しいクラスを作成し、setTypeメソッドで渡されるすべての型で初期化して、コンシューマがObjectクラスのインスタンスの代わりに渡した型のオブジェクトを返すようにしたいとします。

public class MyResponse<T> { 

    private int mStatus; 

    private T mResponseData; 

    public MyResponse(int status, T responseBody) { 
     this.mStatus = status; 
     mResponseData = responseBody; 
    } 

    public MyResponse(T responseBody) { 
     mResponseData = responseBody; 
    } 

    public int getStatus() { 
     return mStatus; 
    } 

    public void setStatus(int status) { 
     this.mStatus = status; 
    } 

    public T getResponseData() { 
     return mResponseData; 
    } 

    public void setResponseData(T responseData) { 
     mResponseData = responseData; 
    } 
} 

にはどうすればいいように誰かがgetResponseDataを呼び出したときではなく、一般的なオブジェクトのはsetTypeに渡された型のオブジェクトを返すことを渡すタイプ(インターフェース)を使用することができますか?

Object mResponse = mGson.fromJson(response.body().string(), mType); 

mMyResponse = new MyResponse<???>(response.code(), mResponse); 
ような何か

どのように私は "???" の場所で渡すMTYPEを使用することができます

答えて

0

ここでは、TypeTokenを利用することができます。それはGsonに含まれており、このようにする必要があります。あなたがこれは私がTypeToken またはタイプMTYPEを解析するために、正確にやっているものです。この here

+0

でさらに読むことができます

Type responseType = new TypeToken<MyResponse<XYZ>>() {}.getType(); gson.fromJson(json, responseType); 

は、ユーザーが何かを渡され、私は今、どのように使用して、私のMyResponse オブジェクトを構築することができますタイプのオブジェクトを持っていますresponseTypeまたはmType(私の場合)。ここにXYZは何ですか? – pyus13

+0

XYZは、Typeパラメータとして渡すクラスです。 –

+0

はい、正しいですが、私はそれをresponseTypeから決定したいと思います。 setResponseType(型の型)というメソッドがあると考えてください。今では、その型を使用してMyResponseを構築する方法を入力し、その型のMyResponse のオブジェクトを返します。 – pyus13

関連する問題