Java | Java 10から使える var を使った変数宣言(型推論)について

Java Java
スポンサーリンク

わざと型が分かりにくいコードを書いて、読みやすさを比較する

では、「わざと型が分かりにくいコードを書いて、varを使った場合と使わない場合を比較する」練習問題と模範解答を紹介します。


練習問題:読みやすさを比較しよう

問題1:リストの宣言

次のコードを var を使わずに書いてみましょう。その後、var を使って書き直してみてください。

import java.util.ArrayList;

class Practice1 {
    public static void main(String[] args) {
        ArrayList<String> fruits = new ArrayList<String>();
        fruits.add("Apple");
        fruits.add("Banana");

        for (String fruit : fruits) {
            System.out.println(fruit);
        }
    }
}
Java

模範解答(varを使った場合)

import java.util.ArrayList;

class Practice1 {
    public static void main(String[] args) {
        var fruits = new ArrayList<String>(); // 型が長いのでvarでスッキリ
        fruits.add("Apple");
        fruits.add("Banana");

        for (var fruit : fruits) { // String型と推論される
            System.out.println(fruit);
        }
    }
}
Java

解説

  • ArrayList<String> のように型が長いときは var が便利
  • 拡張for文の fruitString 型と推論される

問題2:Mapのエントリを扱う

次のコードを var を使わずに書いてみましょう。その後、var を使って書き直してみてください。

import java.util.HashMap;
import java.util.Map;

class Practice2 {
    public static void main(String[] args) {
        HashMap<String, Integer> prices = new HashMap<String, Integer>();
        prices.put("Apple", 100);
        prices.put("Banana", 200);

        for (Map.Entry<String, Integer> entry : prices.entrySet()) {
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}
Java

模範解答(varを使った場合)

import java.util.HashMap;

class Practice2 {
    public static void main(String[] args) {
        var prices = new HashMap<String, Integer>(); // 型が長いのでvarで省略
        prices.put("Apple", 100);
        prices.put("Banana", 200);

        for (var entry : prices.entrySet()) { // Map.Entry<String, Integer> と推論される
            System.out.println(entry.getKey() + " : " + entry.getValue());
        }
    }
}
Java

解説

  • Map.Entry<String, Integer> のように長い型名を省略できる
  • ただし「entryが何の型か分かりにくい」場合もあるので、コメントを残すと親切

問題3:計算結果の型を確認

次のコードを実行して、varで宣言した変数の型を確認してみましょう。

class Practice3 {
    public static void main(String[] args) {
        var a = 10;        // これは何型?
        var b = 3.14;      // これは何型?
        var c = a * b;     // これは何型?

        System.out.println(((Object)a).getClass().getName());
        System.out.println(((Object)b).getClass().getName());
        System.out.println(((Object)c).getClass().getName());
    }
}
Java

👉 出力例

java.lang.Integer
java.lang.Double
java.lang.Double

解説

  • 10 → int型
  • 3.14 → double型
  • int * double → double型に変換される

まとめ

  • varは「型が長いとき」に特に便利
  • ただし「型が分かりにくいとき」はコメントや明示的な型を使った方が親切
  • 練習では「型推論がどう働くか」を意識して確認するのが大事
タイトルとURLをコピーしました