Javaのvarを使った変数型推論宣言

JDK10から使えるようになったvarによる型推論変数宣言(言い方がこれで良いのかどうか分からない)だけど、JDK10からなそうのか試していないが、JDK12ではチョット厭らしい事が出来てしまうようだ。
本来なら、以下のような構文はエラーとして欲しいと思うんだけど・・・

int num = Integer.parseInt(args[0]);
var x = switch(num) {
case 0 -> “Zero”;
case 1->1;
default -> “Many”;
}; // 結果が整数又は文字列

xの型が、実行時まで決まらないというのは如何な物だろうか?バグの温床となりそうな気がするのだが・・・
(JavascriptのvarやVBのdimのみ(variant型)と同じイメージだよね?)

なお、C#では同様の構文はコンパイルエラーとなる。同じ事をやりたければ、dynamicを使用する必要がある。

takezou について

ソフトウェア開発会社(ITと言う言葉は大嫌い)で働く、元技術者。 未だに、社内システム位は作ってますが・・・ プログラミング言語はC#が好き。
カテゴリー: java, 技術系 パーマリンク

1 Response to Javaのvarを使った変数型推論宣言

  1. たけぞう のコメント:

    C#8.0でも、switch式が導入される予定。(今のところβ)
    以下のような感じ。
    var s = x switch {
    0 => “Zero”,
    1 => “One”,
    _ => “Many”
    };
    ちなみに、C#では、返る型が全て同じじゃ無いとコンパイルエラーとなる。
    まぁ、varの定義からするとコンパイル時に型が決まっていないとだめだからね。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です