(Android & Java) Lombokでざっくりシャローコピー

伏見です。

Lombokとは、JavaでGetter,Setter,コンストラクタなどを自動生成していい感じに隠蔽してくれるツールです。
様々なアノテーションを使って表現します。
Lombok 使い方メモ

現在所属しているチームではモバイルアプリ開発を行っています。
Swift,Web,AndroidのAPIのIOやビジネスロジックの共通の大元をまずTypeScriptで書いており、そこからSwiftやJavaのデータ定義用コードを自動生成して各自で使っています。

Typescriptでデータ用モデルを定義するとき、ゲッターセッターだのまず書いていません。
Androidでの開発においても、最近はREST APIから渡ってくる情報や、アプリケーションのビジネスロジックを表現するようなシンプルなデータ用クラスを、js側で扱うpureなJSONとなるべく見た目的に等価にしておきたい気分でいます。

で、ゲッターセッター、コンストラクタの定義にLombokを使っているわけです。

で、本題ですが、このLombok、オブジェクトの浅いコピーにも使えます。
データ用クラスがCloneableを継承すれば当然Lombokなしでもシャローコピー(?)は実装できますが、前述の理由で余計なinterfaceやメソッドを定義してクラス内を汚したくないです。

(参考にしたリンク)

定義側


@AllArgsConstructor
@NoArgsConstructor
@Builder(toBuilder = true) //<-これ
public class PlayerStore {

    public int nowPlayOrder = 0;

}

使用側


            PlayerStore oldPlayerStore = allStore.playerStore;
            PlayerStore oldPlayerStore2 = allStore.playerStore;

            oldPlayerStore.nowPlayOrder = 20;
    
            Log.d("" , oldPlayerStore2.nowPlayOrder+""); //20
            Log.d("" , allStore.playerStore.nowPlayOrder + ""); //20

            allStore.playerStore = oldPlayerStore.toBuilder().build();
            oldPlayerStore.nowPlayOrder = 120;
   
            Log.d("" , oldPlayerStore2.nowPlayOrder+""); //120
            Log.d("" , allStore.playerStore.nowPlayOrder + ""); //20



結果は以上のような感じになります。

便利。
Android用オレオレRedux実装のReducerにあたる部分で使う予定ですが、他に使う場面あるかな…。

Pocket

Naoto

Wanoで色々やらしてもらってまう

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です