スポンサードリンク

Java セッター(setter)でデータをチェックする。

今回はセッターに「データをチェックしてからフィールドに設定する」機能を付けることで、カプセル化のメリットを十分活かせるように改善します。

setAge() メソッドに注目してください。 setAge() は age フィールドに値を設定するセッターです。Javaではセッターのメソッド名は、set + フィールド名(頭文字を大文字)という特別な命名方法が推奨されています。


【1】sample07 フォルダをフォルダごとコピーして、sample08 フォルダを作ります。

java-230.gif


【2】sample08 の Person.java と PersonTest.java を以下のように変更します。

保存先 C:\java\sample08
ファイル名 Person.java

public class Person {
  private String name;
  private int age;
  private String address;

  public Person(String _name, int _age, String _address) {
    name = _name;
    age = _age;
    address = _address;
  }

  public void say(){
    System.out.println("私の名前は" + name + "です。年齢は"
    + age + "才で、住所は" + address + "です。");
  }

  public void setName(String _name){
    name = _name;
  }

  public void setAge(int _age){
    if (_age > 0) {
      age = _age;
    }else{
      age = 0;
    }

  }

  public void setAddress(String _address){
    address = _address;
  }

}



保存先 C:\java\sample08
ファイル名 PersonTest.java

public class PersonTest {
  public static void main(String[] args) {
    Person[] people = new Person[2];
    people[0] = new Person("太郎", 21, "東京都港区");
    people[1] = new Person("花子", 18, "北海道札幌市");

    for(int i = 0; i < people.length; i++){
      people[i].say();
    }

    System.out.println("データを変更。");

    people[0].setName("次郎");
    people[0].setAge(-15);
    people[0].setAddress("福岡県福岡市");
    people[1].setName("桃子");
    people[1].setAge(-25);
    people[1].setAddress("宮城県仙台市");

    for(int i = 0; i < people.length; i++){
      people[i].say();
    }

  }
}


・Person.java は setAge() メソッドにデータチェック機能を加えました。
・PersonTest.java は動作テストのため、わざとマイナスの年齢にしています。


【3】以下の図を参考に、カレントディレクトリの切り替え、コンパイル、プログラムの実行、結果の確認を行います。マイナスの年齢は「0才」となります。

java-232.gif


【解説】

(1)setAge() メソッドを呼び出す時に、マイナスの年齢を実引数に使っています。
people[0].setAge(-15);
people[1].setAge(-25);


(2)setAge() メソッドでは、渡された値をif文でチェックしています。

もし0より大きい年齢の場合はそのままフィールドに設定し、それ以外の場合(else)は 0 を設定するようにしました。

public void setAge(int _age){
  if (_age > 0) {
    age = _age;
  }else{
    age = 0;
  }


これまでの流れをまとめると、まずアクセス修飾子とセッターを使って、フィールドを間接的に操作することでカプセル化しました。

そしてデータをチェックしてからフィールドに設定することで、マイナスの年齢という不自然な値を設定できないようになりました。これでクラスの動きが安定します。

フィールドを直接操作させず、メソッドを使って間接的に操作させることで、利用者側では安心してクラスを使えるわけです。


スポンサードリンク






Java初心者入門講座TOPへ