ユーザ定義型

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

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();
  }
}

以上のプログラムを作成し,実行してみましょう.

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

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

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

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

例題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 から要素を一つずつ取り出し,出力する.
    }
解答例