作作日記

株式会社作作ブログ

Java SE7

初めまして、気がついたら入社して1年経っていた媚山です。

上司の圧政に屈し、日記を書くことになりました。
よろしくお願いいたします。

さて、今回は、7月28日に旧Sun版のJava SE7がJava SE6から約5年ぶりに出るとのことなので、
何が変わったのかをProject Coinの事を中心に書いて行きたいと思います。

Java SE7では、前述したProject Coin以外にも主要なものとして、

・InvokeDynamic
高速な動的メソッド呼び出し

・Fork/Join Framework
新たなマルチスレッドプログラムのためのフレームワーク

・More New I/O
これまでのIOで取得できなかったファイルの属性情報や
検索ができるようになってJavaでファイル操作を行うのが簡単便利になる

なんてのもありますが、正直難しくて私が理解出来ていないので割愛します。
気になる方は調べてみてください。

ではでは、本題のProject Coinです。

Project Coinには以下のような変更が含まれます。

・Strings in switch
switch文の条件に文字列が使えるようになります。

・Simplified Varargs Method Invocation
型が確定できない可変長引数に対して、今までは呼び出し側に、
型の安全性への警告が出ていましたが、
Java SE7からは、定義側にでるようになります。
単純に表示される警告の数が減るわけです。

・mproved type inference for generic instance creation (diamond)
今まで、
List<String> list = new ArrayList<String>();
と書いていたものが
List<String> list = new ArrayList<>();
と簡略して書けるようになります。

・Binary integral literals and underscores in numeric literals
新しい数値表現が追加されました。
0b11010等、bもしくはBを付けることで2進表現だと宣言出来ます。
個人的には大変嬉しい追加です。
今まで何度
「あぁここ、2進数で書いたらどれだけ可読性上がるんだろうな」
なんて思いつつ見ないふりしてましたが、
今後は、「ほら、見やすいでしょ?」って、ドヤ顔出来るわけです。

また、数値が長くなると区切りが分かりづらかったので
10_000_000
と間にアンダーバーを入れてもコンパイル時に除去してくれるようになりました。
地味だけど使えそう

・Multi-catch and more precise rethrow

try{
	・・・
} catch (Exception1 e1) {
	System.out.print(e1);
} catch (Exception2 e2) {
	System.out.print(e2);
}

こんなやって書いていた奴が、

try{
	・・・
} catch (Exception1 | Exception2 e) {
	System.out.print(e);
}

こう書けます。
これ初期の頃から実装決まってたのですが、
まぁずっとJava SE7でなかったので、
個人的には待望の機能です。
しかし、残念なのは、この実装
コンパイル解釈ではなく、新しいクラスを使って
表現を実現しているため、コンパイルバージョンを6にしても動きません。

で、上記はmulti-catchですが、more precise rethrowは

try{
	・・・
} catch(Exception e) {
	throw e;
}

と書いた場合、throws Exceptionをメソッド宣言の後ろに付ける必要がありましたが、
Java SE7からは、詳細なスローされることが予測されるExceptionの種類を記述出来るようになったそうです。

public static void main(String[] args) throws Exception1, Exception2 {
	try {
		boolean b = true;
		if (b) {
			throw new Exception1();
		} else {
			throw new Exception2();
		}
	} catch (Exception e) {
		throw e;
	}
}

こんな感じ・・・これ嬉しいのか?

・try-with-resources statement
たとえばInputStreamでファイルを開いたりした場合、必ずtry-catchを書いてfinallyに
クローズを書いていたと思いますが、いらなくなります。

try (InputStream input = new FileInputStream("【作作】極秘.txt")
{
	・・・
} catch (Exception e){
	・・・
}

おう。便利楽!!ちなみにtry内には;(セミコロン)区切りでいくらでも宣言出来ます。

と、そんな感じで駆け足で見て行きましたが、
結局簡単に便利に書き方変わったね。
ってのが多いです。

本当だったらクロージャーの実装とかもあったのですが、
来年末頃登場予定のSE8に持ち越されたので、
まぁそれを待ってJavaがどんな風に進化していくのかを
見て、今後に期待したいです。

No related posts.

Comments are closed.