Quantcast
Channel: プラネット NetBeans
Viewing all articles
Browse latest Browse all 4643

草木のにをいに誘われた: [Java]JDK7のプレビュー版が出たので早速触ってみた

$
0
0

ということで、JDK7のプレビュー版を触ってみた・・・

けど、そもそもJDK7にどんな機能があったのがかなり忘れていたので(^^;;

(LambdaもJigsawもJDK 8だったよな・・・)

skrbさんのProject Coinの部分を丸コピーで(汗


まずは簡単なところからダイヤモンド記法。

Genericsの<>の中をnewの部分は省略できるというもの。

 List<Integer> list = new ArrayList<>(); 

特にこれといったものは無いですね(^^;;


続いては数値のリテラル記法の追加。

数値を表すとき"_"で区切りを入れられるようになりました。

例えば"10000"を次のように書くことが可能。

 for (int i= 0; i<10_000; i++){ list.add(i); } System.out.println(list.size());
      

このとき次のように実行されます。

10000 構築成功 (合計時間: 0 秒) 

これだけだと、へーって感じですが、

次のようにやってみてもエラーとなりません。

 for (int i= 0; i<1_0_0_0_0; i++){ list.add(i); } System.out.println(list.size()); 

しかも実行結果が一緒です。

10000 構築成功 (合計時間: 0 秒) 

これに関しては古いシステムとか

数値を"_"でくっつけて扱っているシステムとか

あるんじゃないかなという気がしていて

意外にバグの温床になるんじゃないかなと思ってたりします。


次はcase文でStringが使えるようになった点。

こんなことができるようになりました。

 String str = "str"; switch(str){ case "Str": System.out.println("Str"); break; case "str": System.out.println("str"); break; } 

実行結果はこんな感じ。

str 構築成功 (合計時間: 0 秒) 

これは、意外に使いどころが難しいような気がします。


次はcatch文でのマルチキャッチ。

複数の例外を同じ場所でcatchできるようになりました。

 try{ ・・・ }catch(NullPointerException | ArrayIndexOutOfBoundsException e){ ・・・ } 

catchの括弧の中が長くなるのが欠点ですが、地味に使えるかも。



最後はストリームを自動的にcloseしてくれる書き方。

次の書き方をするとfinally句でcloseしなくても

自動的にcloseしてくれるようです。

 try (InputStream in = new FileInputStream("C:\\test.txt"); OutputStream out = new FileOutputStream("C:\\testA.txt")) { byte[] buf = new byte[1024]; int n; while((n = in.read(buf)) >= 0) { out.write(buf, 0, n); } } catch (IOException ex) { ex.printStackTrace(); } 

ちょっと特殊な書き方をしないとcloseしてくれないのか。

この場合、当たり前ですけど、

in、outのスコープはtry句の中だけになりますが、

意外にすっとぼけて微妙にはまりそうな気がちょっとします。

(私のことです・・・Javaを最近触っていなかったからなあ・・・)


他にも機能があるのですが、それはまた機会があればということで。

(というか調べている余裕が・・・)


P.S.

これらの実行はほとんどRuby専用機となっていたNetBeansで試したのですが、

最近のNetBeansはprintStackTraceを書いたら怒られるんですね。

知りませんでした・・・。


Viewing all articles
Browse latest Browse all 4643

Trending Articles