ユーザ定義型

ユーザ定義の型を定義する

Javaでは,自分で型を作成することもできます. まずは,人の氏名(姓,名)を持つ型 Person を作成してみましょう.

Person型

public class Person{
    String givenName;
    String familyName;
}

これで,Person型の作成は完了です.Person 型は2つの String 型のフィールド変数 を持っています.givenName(名)とfamilyName(姓)です.

このプログラムだけでは何もできませんので,Person型を利用するプログラムPersonManagerを作成しましょう.

PersonManager型

public class PersonManager{
  void run(){
    Person person1 =
        this.createPerson("Haruaki", "Tamada");
    this.printPerson(person1);
  }
  Person createPerson(String name1, String name2){
    Person person = new Person();
    person.givenName = name1;
    person.familyName = name2;
    return person;
  }
  void printPerson(Person person){
    System.out.printf("%s, %s%n",
        person.familyName, person.givenName);
  }
  public static void main(String[] args){
    PersonManager app = new PersonManager();
    app.run();
  }
}

以上のプログラムを作成し,実行してみましょう. なお,Person.javaPersonManager.javaは同じディレクトリに置いておく必要があります.

例題1 独自型の実体を作成する.

上で作成した PersonManager 型を以下の指示に従って拡張しましょう.PersonManager.javarunメソッドに以下の処理を追加してください. その際,メモリの状態を想像しながらプログラムを書きましょう.

フィールドの参照・代入もメソッド呼び出しと同じように,どの実体のフィールドなのかを 意識して指定してください.Person型のフィールドgivenNameには,上記のperson.givenName = name1 のように,Person型の変数を介してしかアクセスできません.

  1. Person 型の変数 person2 を宣言してください.
  2. person2 に自分の名前を持つ Person 型の実体を作成して,代入してください.
  3. person2 の情報を画面に出力してください.
例題1の解答例

PersonManager.javaのコンパイル,実行には,同じディレクトリにPerson.javaを置いておく必要があります.

例題2 実体の代入

次の処理を PersonManagerrun メソッドに追加していきましょう.

  1. Person 型の変数 person3 を宣言してください.
  2. person3person1 を代入してください.
  3. person3familyName を全て大文字にしてください.
    • person3.familyName = person3.familyName.toUpperCase();
  4. person1 の情報を画面に出力してください.
メモリ状態
例題2の解答例

例題3 独自の型をListに入れる

上で作成したPerson型の実体 person1person3ArrayListに入れて出力部分をまとめてみましょう.

ArrayListには,Integer 型以外でもどのような型でも入れられますので, 上記のように,ArrayList にどのような型を入れるのか,入っている型が何かをしっかりと認識しましょう.

ヒント

    void run(){
        // 今までの処理内容.
        // ただし,printPersonの行は全て削除しておく.
        ArrayList<何を格納するのか> list = new ArrayList<>();
        // listに person1 〜 person3 を追加する.
        this.printPersons(list);
    }
    void printPersons(...){ // <= printPerson を変更する.
        // 引数で与えられた list から要素を一つずつ取り出し,出力する.
    }
解答例