Commons-Langはオツだねぇ

ちょっとしたことでも「便利だなぁ」と思うことは多々ある。決まりきったコーディングはホントに面倒だ。このようなときに, JakartaのCommonsシリーズはとっても役に立つ。

自作したクラスのインスタンスをコレクション,例えばSetコレクションに格納したいとき,内容が同じものが既に登録されているかどうかを判断するために,equalsメソッドをオーバーライドする。この中で,2つのインスタンスが持つ値を比較する処理は,決まりきったものであり,実にめんどくさい。比較する値がプリミティブでない場合は,null値を意識して条件判断を行わなければならないからだ。

  public boolean equals(Object obj) {

    if (!(obj isntanceof Hoge)) {

      return false;

    } else {

      Hoge target = (Hoge)obj;

      String targetName = target.getName();

      if (name == targetName) {

        return true;

      } else if (name == null   targetName == null) {

        return false;

      } else {

        return name.equals(targetName);

      }

    }

  }

上記はequalsメソッドの中で,nameプロパティの比較によりオブジェクトの等価を判断しているコードである。こんな処理が,プロパティが複数になったり,クラス数が多かったりしたら・・・面倒なことこの上ない。もちろん,staticなユーティリティメソッドを作成して解決すればよいが, Commons-Langがまさに上記コードをやってくれる。

  public boolean equals(Object obj) {

    if (!(obj isntanceof Hoge)) {

      return false;

    } else {

      Hoge target = (Hoge)obj;

      return new EqualsBuilder (). append(name, target.getName()). isEquals();

    }

  }

if文がなくなった分,すっきりしたコードになる。EqualsBuilderを使うことで,nullを意識しなくても2つの値が一致するかどうかを判定することができる。さらに,appendメソッドを連続して呼び出すことで,複数の値の比較にも簡単に対応できる。

プログラミングは単純であればあるほど良い。ちょっとしたことでも楽をして品質の向上に努めたいものである。

このエントリーをはてなブックマークに追加

関連記事

2023年のRemap

Remapにファームウェアビルド機能を追加しました

Google I/O 2023でのウェブ関連のトピック

2022年を振り返って

現在のRemapと今後のRemapについて