2017-07-11 7 views
3
私はAPIからデータを取得し、以下のようにGSONの @SerializedName注釈を使用してJavaオブジェクトにそれをデシリアライズするGSONと一緒にレトロフィットを使用してい

複数のJava注釈を同じ値で使用する方法は?

public class MyApiObject { 
    @SerializedName("apiJsonKey") 
    private String myValue; 
    ... 
} 

それは正常に動作しますが、私はにMyApiObjectのオブジェクトを送信する必要がありますFirebaseデータベースを作成し、そのオブジェクトをJSONにシリアル化する必要があります。 FirebaseのJava APIはこれを自動的に行いますが、シリアル化された名前("apiJsonKey")ではなく、インスタンス変数の名前(myValue)に基づいてキーを生成します。

私はFirebaseの@PropertyName注釈を使用できますが、同じ値を持つ2つの注釈を使用する必要があります。これは冗長でエラーが発生しやすいです。

これを行うより良い方法はありますか?

答えて

2

この場合、通常のaproachは定数を設定し、両方のアノテーションで使用することです。

public class MyApiObject { 
    private static final String MY_VALUE_NAME = "apiJsonKey"; 

    @SerializedName(MY_VALUE_NAME) 
    @ParameterName(MY_VALUE_NAME) 
    private String myValue; 
    ... 
} 

これは、JPAのシーケンスアノテーションではかなり一般的です。

+0

私はこのアプローチについて考えましたが、私のクラスは、そのようなパラメータ/インスタンス変数が12個以上あり、それぞれに別々の定数Stringが必要です。それは本当に不要なようです、実際に行く最善の方法ですか? – Sumit

+0

あなたのクラスはあまりにも多くのものを表しているかもしれません。大きなクラスで終わると、通常、一緒に働く小さなクラスで分割することができます。あなたのケースが複数のクラスに適合しない場合でも、エラーが発生しやすいコードを導入しない方が良いと思います。それが大きかったとしても、同じ文字列を繰り返し使用することは悪い考えです。 – gmanjon

+0

別のオプションは、クラスの定数を区切ることです。しかし、通常、Constants、common、utilsなどの名前のクラスやパッケージは、どこに置くべきかわからないコードの穴になります。あなたのクラスを定義し、再定義して洗練するために、より多くの時間を費やす方が良いと思います。それには時間がかかりますが、通常はより強力なデザインで、読みやすく、手に入れることができます。 – gmanjon

関連する問題