Java 逆引き集 | 型推論(var) — ローカル変数の簡潔化(Java 10+)

Java Java
スポンサーリンク

型推論(var) — ローカル変数の簡潔化(Java 10+)

Java 10から導入された var は、ローカル変数の型をコンパイラに推論させる仕組みです。
「型を明示しなくても、右辺から自動的に型が決まる」ので、コードが簡潔になります。初心者向けに、基本から例題まで解説します。


基本の書き方

var message = "Hello";   // String型と推論される
var number  = 123;       // int型と推論される
var list    = new ArrayList<String>(); // ArrayList<String>型
Java
  • 右辺の型から自動決定される。
  • 型安全: 推論されても型は固定されるので、別の型は代入できない。
var text = "abc";
// text = 100; // コンパイルエラー(String型にintは代入不可)
Java

使える場所と制約

  • 使える場所: ローカル変数(メソッド内の変数、forループの変数)。
  • 使えない場所: フィールド、メソッド引数、戻り値型。
  • 必須: 初期化が必要(右辺がないと型を推論できない)。
var x; // コンパイルエラー(右辺がない)
Java

例題で練習

例題1: コレクションの簡潔化

var names = new ArrayList<String>();
names.add("Tanaka");
names.add("Sato");

for (var n : names) {
    System.out.println(n.toUpperCase());
}
Java

👉 型を省略しても、namesArrayList<String> と推論される。


例題2: Mapのエントリ処理

var map = Map.of("apple", 100, "banana", 200);

for (var entry : map.entrySet()) {
    System.out.println(entry.getKey() + "=" + entry.getValue());
}
Java

👉 entry の型は Map.Entry<String, Integer> と推論される。


例題3: forループのインデックス

for (var i = 0; i < 5; i++) {
    System.out.println("i=" + i);
}
Java

👉 i は int と推論される。


例題4: Stream処理での簡潔化

var list = List.of("A", "BB", "CCC");
list.stream()
    .map(s -> s.length())
    .forEach(len -> System.out.println("len=" + len));
Java

👉 listList<String> と推論される。


テンプレート集

基本形

var 変数名 = 式; // 式の型から推論
Java

forループ

for (var i = 0; i < N; i++) { ... }
Java

拡張for

for (var item : collection) { ... }
Java

注意点と落とし穴

  • 可読性: 型が見えなくなるので、右辺から型が分かる場合に使う。
  • 曖昧な型: var x = null; は推論できない。
  • ジェネリクス: new ArrayList<>() のようにダイヤモンド演算子と組み合わせると便利。
  • 過剰使用はNG: すべて var にすると型が分かりにくくなる。

まとめ

  • var はローカル変数の型をコンパイラに推論させる仕組み。
  • コードが簡潔になるが、型安全は保たれる。
  • 右辺から型が分かる場合に使うのがベスト。

👉 練習課題として「商品の価格表をMapで作り、forループで出力する」コードを var を使って書いてみると、型推論の便利さが体感できます。

タイトルとURLをコピーしました