【ローカル変数型推論】javaのvarの使い方~拡張for文編~【java11】


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を指定してもコンパイル・実行できる。

ただし、 データ型を指定する際には注意が必要なので、こちらの記事(Coming Soon)の内容も併せて確認すること!! 

 


拡張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が何型と推測されるか注意が必要なので、こちらの記事(Coming Soon)の内容も併せて確認すること!! 

 


 

以上、拡張for文編でした♪

変数・配列・Collection編はこちら

ラムダ式編はこちら

注意点はこちら

 


 オススメ!!→ java 11 の問題はcoming soon

 オススメ!!→ java のローカル変数型推論(var)の使い方はこちら 注意点はこちら

 オススメ!!→ java 8 の問題はこちら

 オススメ!!→ javaのプログラム作成練習問題はこちら

 オススメ!!→ java関連の記事はこちら

  • このエントリーをはてなブックマークに追加

PAGE TOP