みんからきりまで

きりみんです。

ADTがJava7に対応したらしいのでメモ

ADTが22.6.0になり、Java7に対応したらしいです。
http://developer.android.com/tools/sdk/eclipse-adt.html


ADTのアップデートはEclipseならヘルプ→更新の確認をすれば行えます。
Java7でコードを書くにはプロジェクトのプロパティからJavaコンパイラを1.6から1.7に変更するだけです。
もしくはJava7の構文を書いてエラーにカーソルを合わせればワンクリックで設定を変更してくれます。


というわけでJava7で追加された機能をおさらいメモ。
といってもJava7の全てに対応しているわけじゃないようなので、実際にAndroidで使えたもののみ。

switch文にStringが使えるようになった

今まではbyte、char、short、intもしくはenumのみが使えたswitch文でStringが使えるようになりました。

String str = "hoge";
switch (str) {
case "huga":
	// 処理
	break;
case "hoge":
	// 処理
	break;
	
case "ugu":
	// 処理
	break;
}

わりと便利な気がする。

ジェネリクスの型引数を省略出来るようになった

ダイアモンド演算子とか言うらしいです。<>←これのことかな?

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

Map<String, List<Integer>> map = new HashMap<String, List<Integer>>();

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 0);

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

Map<String,List<Integer>> map = new HashMap<>();

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, 0);

型引数が複雑な場合は多少コードがすっきりするけど、書く時はEclipseが補完してくれるのでそんなには嬉しくはない。

複数の例外を拾う場合のcatchをまとめられるようになった

エラー処理が同じでいいならごちゃごちゃしたcatch文をひとまとめに書けるようになりました。

try {
	// 処理
} catch (IOException e) {
	Toast.makeText(this, R.string.error_message, Toast.LENGTH_SHORT).show();
} catch (ActivityNotFoundException e) {
	Toast.makeText(this, R.string.error_message, Toast.LENGTH_SHORT).show();
} catch (IllegalStateException e){
	Toast.makeText(this, R.string.error_message, Toast.LENGTH_SHORT).show();
}

try {
	// 処理
} catch (IOException | ActivityNotFoundException | IllegalStateException e) {
	Toast.makeText(this, R.string.error_message, Toast.LENGTH_SHORT).show();
}

これはなかなか良さげですね。

数値リテラルの間にアンダースコアを入れられるようになった

桁の多い数値を見やすくしたりするために使ったり出来るらしいです。
いくらでも入れられますが先頭と末尾には入らない。

int num1 = 100_000;
double num2 = 10.000_000;
byte num3 = 1_1_1;

ちなみに単なる飾りで数値自体は変わらないので計算結果が変わったりはしません。

数値リテラルで2進数を書けるようになった

数値リテラルの先頭に0bを付けると2進数になるようです。

int num = 0b10101;

今まで出来なかったんだっけ?

Exceptionをそのまま再スロー出来るようになった

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

ふーん・・・。

リソース付きtry文(API level 19以上)

try (InputStream is = new FileInputStream("")) {
	// 処理
}

超ざっくり書くと上記みたいにtry内で定義すればいちいちfinallyでclose()する処理を書かなくても自動でclose()してくれるらしいです。
めっちゃ便利っぽいですね!
ただしAPI level 19以上じゃないと駄目らしいので使えるのは来世かな。

まとめ

Java7地味だった。
来世ではJava8を使いたい。

参考

だいたいこちらのサイトを参考にさせて頂きました。


ひしだまのホームページ
http://www.ne.jp/asahi/hishidama/home/index.html (トップページ)
http://www.ne.jp/asahi/hishidama/home/tech/java/uptodate.html (参考にさせて頂いたページ)