javaのvarの使い方
javaのvarの使い方 拡張for文編
変数・配列・Collection編はこちら ラムダ式編はこちら 注意点はこちら
変数・配列・Collection、ラムダ式(と、匿名クラス)に続き、拡張for文でローカル変数型推論を利用した際の忘備録。
なお、本記事も、ひしだまのホームページ(外部リンク)様のこちらの記事を参考に、手元の環境で試した内容をもとに執筆しております。
javaの環境について
javaの環境は以下の通りです。
javaのバージョン
openjdk version “11” 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build 11+28, mixed mode)
javac 11
プログラムを実行する際は自己責任で実行してください。
以上、お約束のやつ終わり!
それでは早速行ってみよう!
サンプルプログラム
構文確認
サンプルプログラムの前に、ローカル変数型推論を使った際の構文の確認。
var 変数名 = 値; //OK //var 変数名; //コンパイルエラー
通常の変数と異なり、 変数宣言時に必ず値を代入しないといけない ので注意!
構文を確認できたところで、使用例に行ってみよう♪
拡張for文(Listをジェネリクス有りで宣言している場合)
List<String> stringList = List.of("a","b","c"); //List(ジェネリクスあり) //通常の拡張for文(比較用) for(String s : stringList){ System.out.print(s); } //拡張for文でvarを使用 for(var v : stringList){ System.out.print(v); }
1つ目は、通常の拡張for文(比較用に記載)。
List型の変数をジェネリクス付きで宣言している場合、拡張for文でvarを指定しても問題なくコンパイル・実行できる。
拡張for文(Listをvarを用いて宣言している場合)
var varList = List.of("a","b","c"); //var で宣言されたList //拡張for文でString型を使用 for(String s : varList){ System.out.print(s); } //拡張for文でvarを使用 for(var v : varList){ System.out.print(v); } //おまけ:拡張for文でObject型(String型の親クラス)を指定 for(Object o : varList){ System.out.print(o); }
Listをvarを用いて宣言している場合、拡張for文でListの要素と推測される具体的なデータ型(上記ではString型)を指定してもvarを指定してもコンパイル・実行できる。
ただし、 データ型を指定する際には注意が必要なので、こちらの記事の内容も併せて確認すること!!
拡張for文(Listをジェネリクス無しで宣言している場合)
List nonGenericList = List.of("a","b","c"); //List(ジェネリクスなし) //拡張for文でString型を使用 //コンパイルエラー。変数宣言時にジェネリクスが指定されていないため、nonGenericListの要素はObject型 /* for(String s : nonGenericList){ System.out.print(s); } */ //拡張for文でvarを使用 for(var v : nonGenericList){ System.out.print(v); } //おまけ:拡張for文でObject型を使用 for(Object o : nonGenericList){ System.out.print(o); }
そもそも List型の変数をジェネリクス無しで宣言している場合、List型の変数の各要素はObject型 となる。
そのため、拡張for文でListの要素と推測される 具体的なデータ型(上記ではString型)を指定すると、コンパイルエラー となる。
一方で、 varを指定した場合は、問題なくコンパイル・実行できる。
ただし、 varが何型と推測されるか注意が必要なので、こちらの記事の内容も併せて確認すること!!
以上、拡張for文編でした♪
オススメ!!→ java 11 の問題はこちら オススメ!!→ java のローカル変数型推論(var)の使い方はこちら 注意点はこちら オススメ!!→ java 8 の問題はこちら オススメ!!→ javaのプログラム作成練習問題はこちら オススメ!!→ java関連の記事はこちら