1

最近、AutoValues (GSON) 拡張機能を使用して JSON データの解析を高速化するという概念に出会いました。実際、json を 2 倍の速さで解析できることがわかりました。

AutoValues を使用している間のデータ セットは不変ですが、多くの場合、データ セット/モデルは json に似ており、マッパーは必要ありません。

したがって、モデルクラスに個々のデータ要素を設定したい場合、これは実現可能ではないように見えます(抽象ゲッターしかなく、セッターがないためです。この問題を回避する方法はありますか、それともポイントがありませんか。サンプルコードを使用して説明しますAutoValue を使用した同様の構文です。

したがって、通常は次のようなコードを記述します

public class ModelClass{
    private String aValue;
    private String anotherValue;
    public String getAValue(){
        return this.aValue;
    }
    public void setAValue(String aValue){
        this.aValue = aValue;
    }
    public String getAnotherValue(){
        return this.anotherValue;
    }
    public String setAnotherValue(anotherValue){
        this.anotherValue = anotherValue
    }
}

public class ViewClass{
     public void foo(){
          String json = {"aValue":"This is a sample string", "anotherValue": "this is another string"};
          ModelClass model = gson.fromJson(json, ModelClass.class);
          model.getAValue();
          model.setAValue("this is a new value"); // and we can set individual element ModelClass.aValue


     }
}

ただし、自動値を使用している間、モデル クラスの構造は次のように変更されます。

  @AutoValue public abstract class AutoValueModel{
       public abstract String bValue();
       public abstract String otherValue();

       public static AutoValueModel(String bValue, String otherValue){
           return new AutoValue_AutoValueModel(bValue, otherValue);
       }
  }

// ご覧のように、AutoValueModel 構造にはセッターが含まれていません (AutoValues の背後にある基本的な前提は不変であることがわかっているにもかかわらず、ユーザー アクションなどに基づいて) bValue だけを変更し、引き続き使用したい場合はどうでしょうかコードの他の部分で。次に、まったく同じ AutoValueModel を使用して json をシリアル化します。または、AutoValue 手法を使用して逆シリアル化してから、データセットを変更できるマップされたモデルを使用する必要がありますか? (この手法を使用すると、AutoValue を使用して得られた速度の利点が失われますか?)

また、 AutoValues について学んだ場所からの参照:

オートバリューの概要

AUTOVALUE GSON 拡張機能による JSON デシリアライゼーションの高速化

4

1 に答える 1