1. [1, 2, 3] の合計は 6
  2. 空配列の合計は 0
  3. 負数を含む [-5, 10, -3, 8] の合計は 10
  4. 要素 1 つだけ [42] の合計は 42
コース一覧
Java 中級:コレクション・Stream・例外処理
境界型パラメータ

Java 中級:コレクション・Stream・例外処理

コレクション、ジェネリクス、例外処理、Stream API、関数型インターフェース、日付処理、ファイル I/O、継承など Java の中級トピックを実践的に学べるコースです。Java の基礎文法とオブジェクト指向を理解している学習者を対象に、現場の Java コードを読み書きするための知識を補強します。約 16 時間 (1 日 30 分 × 32 日) で 64 レッスンを修了でき、修了後は Spring Boot や業務システム開発に必要な Java 力が身につきます。

1
コレクション基礎
01. ArrayList を使う5分
02. List を走査する5分
03. 要素の削除と検索5分
04. HashMap の基本5分
05. Map を走査する5分
06. Set で重複を排除5分
07. Collections クラスの便利メソッド5分
08. コレクション基礎 まとめクイズ5分
2
ジェネリクス
01. ジェネリッククラスを作る5分
02. ジェネリックメソッド5分
03. 境界型パラメータ5分
04. ワイルドカード ?5分
05. Pair<K,V> を作る5分
06. ジェネリクス まとめクイズ5分
3
例外処理
01. try-catch で例外をつかむ5分
02. 複数の catch ブロック5分
03. throws と例外の伝播5分
04. 独自の例外を作る5分
05. try-with-resources5分
06. finally ブロック5分
07. 例外処理 まとめクイズ5分
4
Stream API
01. Stream を作る5分
02. filter で絞り込む5分
03. map で変換する5分
04. reduce で集約する5分
05. collect で集める5分
06. sorted で並び替え5分
07. distinct で重複排除5分
08. limit と skip5分
09. 並列ストリーム5分
10. Stream API まとめクイズ5分
5
関数型インターフェース
01. ラムダ式の基本5分
02. メソッド参照 ::5分
03. Function インターフェース5分
04. Predicate インターフェース5分
05. Consumer と Supplier5分
06. BiFunction と 2 引数の関数5分
07. 関数型インターフェース まとめクイズ5分
6
文字列操作
01. String.format で書式化5分
02. StringBuilder で連結5分
03. 正規表現の基本5分
04. split と join5分
05. 文字列操作 まとめクイズ5分
7
日付と時刻
01. LocalDate で日付を扱う5分
02. LocalDateTime で時刻も扱う5分
03. Duration で時間差を計算5分
04. 日付の書式化とパース5分
05. 日付の加減算5分
06. 日付と時刻 まとめクイズ5分
8
ファイル I/O
01. Files でファイルに書き込む5分
02. ファイルを行単位で読む5分
03. Path でファイルパスを扱う5分
04. BufferedReader と Stream API5分
05. ファイルの存在確認と削除5分
06. ファイル I/O まとめクイズ5分
9
継承とポリモーフィズム
01. extends で継承する5分
02. super で親を呼ぶ5分
03. メソッドのオーバーライド5分
04. abstract で抽象クラス5分
05. interface で契約を定義5分
06. default メソッド5分
07. instanceof と型パターン5分
08. ポリモーフィズムを活かす5分
09. 継承とポリモーフィズム まとめクイズ5分

境界型パラメータ

T のままでは、数として扱えない

<T> と書けばどんな型でも受け取れます。ただし、受け取ったあとにできることは驚くほど少なくなります。

Java

public static <T> double half(T value) { return value.doubleValue() / 2; // コンパイルエラー }

コンパイラから見ると T は何になるか分からない型なので、どんな型にもある toString や equals くらいしか呼べません。doubleValue() は java.lang.Number が持つメソッドで、T が Number の仲間だと保証されていない以上、呼び出しは弾かれます。何でも受け取れることと、受け取ったものを使えることは別なのです。

extends で「ここから下」に絞る

型パラメータには上限を付けられます。<T extends Number> と書けば、T は Number か、その子孫でなければならない、という意味になります。

Java

public static <T extends Number> double half(T value) { return value.doubleValue() / 2; }

さっき弾かれた doubleValue() が、今度は通ります。T が必ず Number の仲間だと分かったので、Number が持つメソッドは安心して呼べるからです。

Java

half(10); // Integer は Number の子孫 ─ OK half(2.5); // Double も OK half("10"); // String は Number ではない ─ コンパイルエラー

実行してから気づくのではなく、書いた時点で止まってくれるのが境界の値打ちです。

比べたいなら Comparable を境界にする

もう 1 つよく使うのが <T extends Comparable<T>> です。Comparable を実装した型に絞れば、compareTo で大小を比べられます。

Java

public static <T extends Comparable<T>> T bigger(T a, T b) { return a.compareTo(b) >= 0 ? a : b; }

Integer String LocalDate はどれも Comparable を実装しているので、そのまま渡せます。ここで extends と書いているところに注目してください。境界にはクラスもインタフェースも指定できますが、インタフェースのときも implements ではなく extends を使う決まりです。ここは Java の文法の例外なので、そういうものだと覚えてしまうのが早道です。

条件を重ねたいときは & でつないで <T extends Number & Comparable<T>> のように書きます。クラスを含める場合は 1 つだけ、しかも先頭に置く必要があります。

課題そのものは int の配列を受け取って合計を返すだけなので、境界を書く場面はありません。まずは、境界がどんなときに効いてくるのかを上の 2 つの例で押さえておいてください。

要件

  1. Solution.sumNumbers(int[] arr) を public static int で実装すること
  2. 配列の全要素を足し合わせた結果を int で返すこと
  3. 空配列が渡されたら 0 を返すこと (例外を投げない)

入出力例

sumNumbers([1,2,3]) → 6 sumNumbers([]) → 0 sumNumbers([-5,10,-3,8]) → 10 sumNumbers([42]) → 42

ヒント

拡張 for 文 `for (int value : arr) { total += value; }` を使うと配列全要素を簡単に走査できます

合計を入れる変数 `int total = 0;` を最初に用意しておくと、空配列のときも自然に `0` が返ります

境界型ジェネリックの本文版 `<T extends Number> double sumNumbers(List<T> list)` では、`value.doubleValue()` を足し込むのがポイントです。比較しながら書いてみましょう

生田 陸人
監修生田 陸人
ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
編集 ゆめさく編集部·公開 2026/05/19·更新 2026/08/26

関連レッスン

  • ワイルドカード ?

    ジェネリクスのワイルドカード `?` と上限境界 `? extends T` 下限境界 `? super T` を学び、PECS の原則で使い分けられるようになろう。

  • Pair<K,V> を作る

    複数の型パラメータを持つジェネリッククラス Pair<K,V> を題材に、HashMap<K,V> と同じ仕組みでキーと値の組を表現する方法と、Record を使った最新の書き方を学ぼう。

  • ジェネリクス まとめクイズ

    ジェネリッククラス / ジェネリックメソッド / 境界型 / ワイルドカード / Pair の総まとめ。PECS や型消去 (type erasure) など実務で問われやすい論点を 4 択クイズで確認する。

  • try-catch で例外をつかむ

    Java の例外処理の基本となる try-catch 構文を学び、NumberFormatException を捕まえてデフォルト値を返すコードを書いてみよう。

このレッスンに出てくる用語

意味があいまいなまま進んだ語は、ここから読み直せます。

  • メソッドクラスに属する関数
  • クラスデータと振る舞いを束ねる単位
  • 配列サイズ固定の同型データの集まり
main.java
学習モード
エディタを読み込んでいます

メモ

境界型パラメータ

⌘S で保存