0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Java入門】第11章 ラッパークラスとコレクション

0
Last updated at Posted at 2026-10-31

Java には、よく使う機能を持ったクラスが最初から用意されています。この章では、その中から Spring入門で使うものを学びます。int をクラスにした Integer、要素を増やしたり減らしたりできる List、日付を表す Date です。List<Employee> のように型を < > で指定する ジェネリクス の読み方も、ここで覚えます。

この章で学ぶこと

  • Integer と int の違い、自動の変換
  • Integer.parseInt で文字列を数に変える
  • List と ArrayList(add・get・size、拡張 for 文)
  • ジェネリクス <型> の読み方
  • java.util.Date

11.1 この章で作るもの

この章では、ch11 パッケージに、社員のクラス Employee と Main を作ります。Employee は、Spring入門の Entity に近づけて、社員IDと年齢を Integer にし、生年月日の Date を持たせます。章の最後には、Main を実行するとコンソールに次のように表示されるようになります(「今の日時」は実行したときの日時になります)。

コンソール
新規登録前の社員ID:null
社員ID:4
1年後の年齢:31
文字列を数に変換:27
社員の数:3
1人目:雷禅 海皇
雷禅 海皇(26歳)
院照 心愛(27歳)
林檎 星飛(24歳)
今の日時:Tue Oct 13 10:00:00 JST 2026
生年月日:null
ファイル 作業 内容
ch11/Employee.java 新規 社員を表すクラス。社員ID・名前・年齢・生年月日を持つ
ch11/Main.java 新規 Integer・List・Date を使うクラス(main あり)

11.2 Integer と int

第5章で、「int には null を入れられない」と学びました。社員IDのように、「新規登録の前はまだ値が無い」ことを表したい数には、int をクラスにした Integer を使います。

  1. src を右クリックし、新規 → パッケージ で ch11 パッケージを作ります。

  2. ch11 パッケージを右クリックし、新規 → クラス で、名前 Employee、main の チェックを入れずに クラスを作ります。緑の行を入力します(getter と setter は ソース → getter および setter の生成 で作れます)。

    ch11/Employee.java
    package ch11;
    
    /** 社員を表す */
    public class Employee {
    
        private Integer empId;
        private String name;
        private Integer age;
    
        public Integer getEmpId() {
            return empId;
        }
    
        public void setEmpId(Integer empId) {
            this.empId = empId;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Integer getAge() {
            return age;
        }
    
        public void setAge(Integer age) {
            this.age = age;
        }
    
    }
    
  3. ch11 パッケージを右クリックし、新規 → クラス で、名前 Main、main に チェックを入れて クラスを作り、緑の行を入力します。

    ch11/Main.java
    package ch11;
    
    public class Main {
    
        public static void main(String[] args) {
            Employee e1 = new Employee();
            System.out.println("新規登録前の社員ID:" + e1.getEmpId());
            e1.setEmpId(4);
            e1.setName("田中 美咲");
            e1.setAge(30);
            System.out.println("社員ID:" + e1.getEmpId());
            int nextAge = e1.getAge() + 1;
            System.out.println("1年後の年齢:" + nextAge);
        }
    
    }
    
  4. 保存して、Main.java を実行します。

    コンソール
    新規登録前の社員ID:null
    社員ID:4
    1年後の年齢:31
    

new Employee() の直後、empId には何も入っていないので null です。int なら 0 になり、「社員IDが 0 の社員」なのか「まだ IDが無い」のかを区別できません。Integer なら null で「まだ無い」ことを表せます。

ラッパークラス

Integer のように、基本型の値をクラスの型として扱えるようにしたものを ラッパークラス といいます。基本型ごとに用意されています。

基本型 ラッパークラス
int Integer
long Long
double Double
boolean Boolean

自動の変換

e1.setEmpId(4) では、int の 4 を Integer の引数に渡しています。int nextAge = e1.getAge() + 1; では、Integer の値を int として計算しています。このように、int と Integer は 自動で変換 されるので、ふつうの数と同じように計算や代入ができます。

【ご注意】null の Integer を int にはできない

Integer が null のときに、int の変数に入れたり計算したりすると、NullPointerException が起きます。e1.setAge(30) の前に int nextAge = e1.getAge() + 1; を書くと、このエラーになります。Integer の値を計算に使うときは、null でないことを確かめてから使います。

【知識メモ】Spring入門では数を Integer にする

Spring入門の Entity と Form では、数の項目(社員ID・性別・年齢・部署ID)をどれも Integer にしています。社員IDは「新規登録の前は無い」ことを表すため、年齢などは「画面で未入力のときに null として受け取り、入力チェックでエラーにする」ためです。

11.3 Integer.parseInt

画面やファイルから受け取った値は、"26" のように数字の 文字列 です。文字列のままでは計算できないので、Integer.parseInt(文字列) で int に変えます。

  1. Main.java の main メソッドの最後に、緑の行を書き足します。

    ch11/Main.java(main メソッドの最後)
            System.out.println("1年後の年齢:" + nextAge);
    
            String input = "26";
            int age = Integer.parseInt(input);
            System.out.println("文字列を数に変換:" + (age + 1));
        }
    
  2. 保存して実行します。最後に、次のように表示されます。

    コンソール(最後の行)
    文字列を数に変換:27
    

Integer.parseInt は、Integer クラスの static なメソッドです(第7章 7.5 の クラス名.メソッド名(…) の形)。"abc" のように数に変えられない文字列を渡すと、NumberFormatException というエラーが起きます。このエラーの扱いは、第12章で学びます。

【知識メモ】Spring入門では変換を Spring が行う

Spring入門では、画面から送られてきた "26" という文字列を、Form の Integer age に Spring が自動で変換して入れてくれます。自分で parseInt を書くことはありませんが、裏で同じことが行われています。

11.4 List と ArrayList

第6章の配列は、作るときに要素の数が決まり、後から増やせませんでした。要素を後から増やしたり減らしたりできる入れ物が List(リスト)です。List はインターフェース(第10章)で、それを実装したクラスの1つが ArrayList です。

  1. Main.java に、社員を作って返す static なメソッド create と、リストを使う処理を書き足します。List・ArrayList は補完で入力すると、import java.util.List;・import java.util.ArrayList; が自動で入ります。

    ch11/Main.java
    package ch11;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class Main {
    
        public static void main(String[] args) {
            Employee e1 = new Employee();
            System.out.println("新規登録前の社員ID:" + e1.getEmpId());
            e1.setEmpId(4);
            e1.setName("田中 美咲");
            e1.setAge(30);
            System.out.println("社員ID:" + e1.getEmpId());
            int nextAge = e1.getAge() + 1;
            System.out.println("1年後の年齢:" + nextAge);
    
            String input = "26";
            int age = Integer.parseInt(input);
            System.out.println("文字列を数に変換:" + (age + 1));
    
            List<Employee> employees = new ArrayList<>();
            employees.add(create(1, "雷禅 海皇", 26));
            employees.add(create(2, "院照 心愛", 27));
            employees.add(create(3, "林檎 星飛", 24));
            System.out.println("社員の数:" + employees.size());
            System.out.println("1人目:" + employees.get(0).getName());
            for (Employee e : employees) {
                System.out.println(e.getName() + "(" + e.getAge() + "歳)");
            }
        }
    
        /** サンプルデータを作るために、社員IDと名前と年齢を決めて社員を作る
         * @param empId 社員ID
         * @param name 名前
         * @param age 年齢
         * @return 作った社員 */
        static Employee create(Integer empId, String name, Integer age) {
            Employee employee = new Employee();
            employee.setEmpId(empId);
            employee.setName(name);
            employee.setAge(age);
            return employee;
        }
    
    }
    
  2. 保存して実行します。

    コンソール(後半)
    社員の数:3
    1人目:雷禅 海皇
    雷禅 海皇(26歳)
    院照 心愛(27歳)
    林檎 星飛(24歳)
    
コード 意味
List<Employee> employees = new ArrayList<>(); Employee を入れる空のリストを作る。変数の型はインターフェースの List、作るのはクラスの ArrayList(第10章の Validatable v1 = e1; と同じ形)。new の後ろの <> は、左と同じ型という意味
employees.add(要素) 最後に要素を足す
employees.get(添字) 添字の要素を取り出す。添字は配列と同じく 0 から
employees.size() 要素の数。配列の length と違い ( ) を付ける
for (Employee e : employees) 拡張 for 文で、要素を先頭から1つずつ取り出す。配列と同じ書き方

employees.get(0).getName() は、「get(0) で取り出した Employee の getName() を呼ぶ」という意味です。メソッドの戻り値に対して、続けて . でメソッドを呼べます(第13章 13.5)。

【知識メモ】List 型の変数に ArrayList を入れる理由

Spring入門では、データベースから取り出した社員の一覧を List<Employee> で受け取り、画面のテンプレートに渡します。

List はインターフェースで、ArrayList はそれを実装したクラスです。List を実装したクラスは、ArrayList のほかにも LinkedList などがあります。どのクラスも add・get・size など、List に決められたメソッドを持っています。

変数の型をクラスの ArrayList ではなく、インターフェースの List にしておくのは、そのためです。List 型の変数には、List を実装したクラスなら、どのクラスのオブジェクトの参照でも代入できます。変数を使う側は List のメソッドだけを使って書くので、後から代入するクラスを別のものに変えても、使う側のコードは書き直さずに済みます。第10章 10.4で、インターフェースの型の変数に、それを実装した別々のクラスのオブジェクトを入れたのと同じ考え方です。

Spring入門でも、変数の型は List にします。Spring がどのクラスで一覧を作ったかを気にせずに、List のメソッドと拡張 for 文(テンプレートでは th:each)で順に使えます。ArrayList を自分で new することは、ほとんどありません。

11.5 ジェネリクス

List<Employee> の <Employee> は、「このリストに入れる要素の型は Employee」という指定です。この < > で型を指定する仕組みを ジェネリクス といいます。

書き方 読み方
List<Employee> Employee を入れる List
List<String> String を入れる List
List<Integer> Integer を入れる List。<int> とは書けない(基本型は指定できないので、ラッパークラスを使う)
JpaRepository<Employee, Integer> 型を2つ指定する例(Spring入門)。「扱う Entity は Employee、その ID の型は Integer」。読み方は第13章

型を指定しておくと、employees.add("雷禅 海皇") のように違う型を入れようとしたときにコンパイルエラーになり、employees.get(0) の結果は Employee として、キャスト無しでそのまま使えます。この教材では、ジェネリクスを自分で定義することはなく、使う側として読み書きできれば十分 です。

11.6 Date

日付と時刻を表すクラスが java.util.Date です。new Date() と書くと、今の日時を持つオブジェクトができます。

  1. Employee.java に、生年月日のフィールドと getter・setter を書き足します。Date は補完で入力し、候補から「Date - java.util」を選びます(java.sql.Date という別のクラスも候補に出るので、java.util のほうを選びます)。

    ch11/Employee.java(追加する部分)
    package ch11;
    
    import java.util.Date;
    
    /** 社員を表す */
    public class Employee {
    
        private Integer empId;
        private String name;
        private Integer age;
        private Date birthDate;
    
        …(これまでの getter と setter)…
    
        public Date getBirthDate() {
            return birthDate;
        }
    
        public void setBirthDate(Date birthDate) {
            this.birthDate = birthDate;
        }
    
    }
    
  2. Main.java の main メソッドの最後に、緑の行を書き足します。Date はここでも補完で入力し、import java.util.Date; を入れます。

    ch11/Main.java(main メソッドの最後)
            for (Employee e : employees) {
                System.out.println(e.getName() + "(" + e.getAge() + "歳)");
            }
    
            Date now = new Date();
            System.out.println("今の日時:" + now);
            System.out.println("生年月日:" + e1.getBirthDate());
        }
    
  3. 保存して実行します。

    コンソール(最後の2行)
    今の日時:Tue Oct 13 10:00:00 JST 2026
    生年月日:null
    

Date を println で表示すると、「曜日 月 日 時:分:秒 タイムゾーン 年」の英語の形になります。2026/10/13 のような形で表示したり、画面から入力された日付を Date に変換したりする方法は、Spring入門で画面を作るときに学びます。この教材では、Date は「日付を入れる型」として、フィールドに持たせるところまでにします。値を入れていない birthDate は null です。

【知識メモ】java.time.LocalDate

Java には、日付だけを扱う新しいクラス java.time.LocalDate もあります。この教材と Spring入門では、現場で今も広く使われている java.util.Date を使います。

11.7 うまくいかないときは

症状 考えられる原因と対処
NullPointerException が int nextAge = e1.getAge() + 1; で出る getAge() が null を返しています。setAge(…) で値を入れてから計算してください。詳しくは 付録A「よくある実行時のエラー」 を見てください。
「List を型に解決できません」「ArrayList を型に解決できません」 import java.util.List;・import java.util.ArrayList; がありません。クラス名の末尾で Ctrl + Space を押して import を入れてください。
「型 List<Employee> のメソッド add(Employee) は引数 (String) に適用できません」 リストに、指定した型と違う型の値を入れようとしています。< > の型と、入れる値の型を合わせてください。
「length を解決できないか、フィールドではありません」 List の要素の数は size() です。length は配列です。
Employee.java の import が import java.sql.Date; になっている 補完で java.sql.Date を選んでしまっています。この章では動きますが、第14章以降で日付を入れるときにエラーになります。import の行を import java.util.Date; に直してください。
NumberFormatException が出る Integer.parseInt に、数に変えられない文字列を渡しています。第12章で扱います。詳しくは 付録A「よくある実行時のエラー」 を見てください。

ほかのエラーは、付録A「よくあるコンパイルエラー」・付録A「よくある実行時のエラー」 も参考にしてください。

11.8 まとめと確認問題

まとめ

  • Integer は int の ラッパークラス。null を入れられるので、「まだ値が無い」ことを表せる。int とは自動で変換されるが、null を int にすると NullPointerException
  • Integer.parseInt("26") で文字列を int に変える。数に変えられない文字列は NumberFormatException
  • List<Employee> employees = new ArrayList<>(); で要素を増減できるリストを作る。add・get(添字)・size()、拡張 for 文で使う。import java.util.List;・import java.util.ArrayList; が必要
  • ジェネリクス <型> は、入れる要素の型の指定。基本型は書けないのでラッパークラスを使う
  • java.util.Date は日付と時刻を表すクラス。new Date() は今の日時。Spring入門では生年月日に使う

この章で使ったクラスとメソッドは、付録B「クラスとメソッド早見表」 にまとめています。

確認問題

問1 社員IDを int ではなく Integer にする理由を答えてください。

解答を見る

Integer なら null を入れられるので、「新規登録の前で、まだ社員IDが無い」ことを表せるためです。int だと 0 になり、「IDが 0」なのか「まだ無い」のかを区別できません。

問2 文字列 "30" を int の変数 n に入れるコードを書いてください。

解答を見る

int n = Integer.parseInt("30");

問3 String を入れるリストを作り、"営業部" を足して、要素の数を表示するコードを書いてください。

解答を見る

List<String> depts = new ArrayList<>();
depts.add("営業部");
System.out.println(depts.size());

問4 List<int> と書けないのはなぜですか。どう書きますか。

解答を見る

ジェネリクスには基本型を指定できないためです。ラッパークラスを使って List<Integer> と書きます。

問5 配列とリストで、要素の数を調べる書き方はそれぞれどう違いますか。

解答を見る

配列は names.length(( ) なし)、リストは employees.size()(( ) あり)です。


前へ

第10章 継承とインターフェース

次へ

第12章 例外

目次へ

【Java入門】目次

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?