Javaプログラミング/サーバサイド&ケータイJava

「ソース」メニューを使いこなそう!(4ページ目)

ソースコードの作成を補佐してくれる「ソース」メニュー。意外に使いこなしていない人も多いのでは?

執筆者:掌田 津耶乃

フィールドの活用も「ソース」メニューで


例えば、いくつかのフィールドを用意して、必要なデータを保管するようなクラスを考えてみましょう。このクラスを、もっときちんと利用できるように修正してみることにします。

public class Sample {
  int n = 0;
  String msg = "";
}


こんな感じのものです。データを保持するクラスとしてこの種のものはよく作りますね。しかし、これでは、あまりに情けないクラス定義です。とりあえず、フィールドをprivateにして、アクセス用のメソッドを用意しましょう。

まず、2つのフィールドをprivateに変更しておきましょう。そしてクラス内の適当なところを選択し、<ソース><GetterおよびSetterの作成>メニューを選びます。現れたダイアログで、「作成するGetterおよびSetterの選択」で「msg」「n」の2つのフィールドをONに、そして「アクセス修飾子」を「public」に設定してOKしましょう。するとソースコードはこんな具合に修正されます。

public class Sample {
  private int n = 0;
  private String msg = "";
  
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public int getN() {
    return n;
  }
  public void setN(int n) {
    this.n = n;
  }
}


あっという間に、それなりに整ったJavaBeansクラスになりました。更にもう一ひねりしましょう。<ソース><フィールドを使用してコンストラクタを作成>メニューを選び、2つのフィールドのチェックをONにしてOKします。すると、ソースコードはこうなります。

public class Sample {
  private int n = 0;
  private String msg = "";
  
  public Sample(int n, String msg) {
    super();
    this.n = n;
    this.msg = msg;
  }
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public int getN() {
    return n;
  }
  public void setN(int n) {
    this.n = n;
  }
}


フィールドを初期化するためのコンストラクタが自動生成されました。ここまできたら、更にもう一歩。クラスの比較を正しく行なえるようにequalsとhashCodeメソッドを実装しましょう。<ソース><hashCode()およびequals()の生成>メニューを選び、2つのフィールドのチェックをONにしてOKします。するとソースコードは更にこんな具合になります。

public class Sample {
  private int n = 0;
  private String msg = "";
  
  public Sample(int n, String msg) {
    super();
    this.n = n;
    this.msg = msg;
  }
  public String getMsg() {
    return msg;
  }
  public void setMsg(String msg) {
    this.msg = msg;
  }
  public int getN() {
    return n;
  }
  public void setN(int n) {
    this.n = n;
  }
  
  @Override
  public int hashCode() {
    final int PRIME = 31;
    int result = 1;
    result = PRIME * result +
        ((msg == null) ? 0 : msg.hashCode());
    result = PRIME * result + n;
    return result;
  }
  
  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    final Sample other = (Sample) obj;
    if (msg == null) {
      if (other.msg != null)
        return false;
    } else if (!msg.equals(other.msg))
      return false;
    if (n != other.n)
      return false;
    return true;
  }
}


hashCodeでは、2つのフィールドの値によってきちんと異なるハッシュ値が生成されるように作成されています。またequalsも、2つのフィールドがそれぞれ等しい値である場合にはtrueを、それ以外はfalseを返すようになっています。まさに、パーフェクト!ですね。

最初の「フィールドが2つあるだけ」のクラスと、この最終的に作られたクラスを比べてみてください。途中、ソースコードは一切書いていません。ただメニューを選ぶだけで、これだけしっかりしたソースコードが作成できてしまうのです。フィールドを活用したクラスでは、これらは必須といえそうですね。
【編集部おすすめの購入サイト】
Amazonで Java 関連の書籍をチェック!楽天市場で Java 関連の書籍をチェック!
  • 前のページへ
  • 1
  • 2
  • 3
  • 4
※記事内容は執筆時点のものです。最新の内容をご確認ください。
※OSやアプリ、ソフトのバージョンによっては画面表示、操作方法が異なる可能性があります。

あわせて読みたい

あなたにオススメ

    表示について

    カテゴリー一覧

    All Aboutサービス・メディア

    All About公式SNS
    日々の生活や仕事を楽しむための情報を毎日お届けします。
    公式SNS一覧
    © All About, Inc. All rights reserved. 掲載の記事・写真・イラストなど、すべてのコンテンツの無断複写・転載・公衆送信等を禁じます