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#が好き。 好きなことだけ拾って投稿しているので、内容にはあまり期待しないでねw
カテゴリー: java, 技術系 パーマリンク

Javaのvarを使った変数型推論宣言 への2件のフィードバック

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

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

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

    Javaの場合、もっと単純に、switch式ではなく、3項演算子でも同じ事ができてしまう。

    int n;
    ・・・
    var x = n == 0 ? 1 : “Not One”;

    コンパイル通るし、実際に実行すると、xの型は実行時に決まる。
    C#のdynamicと同じで・・・これいいの?

たけぞう へ返信する コメントをキャンセル

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

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください