2011年6月26日日曜日

Java SE 7で何が変わるのか

来る2011年7月28日は、5年ぶりのJavaアップデート予定日。次期バージョンのJava SE 7にはいくかの新しい要素が含まれているので、先日のJJUG Cross Community Conferenceの振り返りを兼ねてまとめておく。

Java SE 7の主なトピックは以下の通り。

  • Project Coin (JSR 334)
  • NIO.2(JSR 203)
  • Fork/Join Framework
  • Invoke Dynamic (JSR292)

Project Coin

Project Coinとは、言語仕様な小さな変更を行うプロジェクト。

switch文でStringが使えるようになる

public void execute(String state)
{
  switch (state)
  {
  case "ready":
    startSomething();
    break;

  case "running"
    finishJob();
    brak;
  }
}

数値表現形式の追加

バイナリ表記(0bで書き始める)が追加された。

  • 1 (10進数表記)
  • 01 (8進数表記)
  • 0x1 (16進数表記)
  • 0b1 (バイナリ表記)

可読性向上を目的としたアンダースコア表記が追加された。

// クレカ番号など?
long data = 1234_5678_9012L;

マルチキャッチ

数種の例外処理をまとめることが可能になった。

try
{
  doSomething();
}
catch (IOException | SqlException e)
{
  e.printStackTrace();
}

例外再送の記述を簡易化

catch句にfinalを付けることで、メソッド定義のthrows部が不要になる。

public void execute() // throws IOException が不要
{
  try
  {
    doSomething();
  }
  catch (final IOException e)
  {
    throw e;
  }
}

Genericsインスタンス生成時の型推論強化

右辺では<>のみ記載すればOKになった。

// 今までの書き方
Map<String, String> data = new HashMap<String, String>();

// これからの書き方
Map<String, String> data = new HashMap<>();

try構文におけるリソース解放機能の追加

C#で言うところのusing的な感じ。自動的にclose()メソッドがコールされる。

try ( InputStream is = new FileInputStream("/tmp/data.txt") )
{
  doSomething();
}
catch (IOException e)
{
  e.printStackTrace();
}

0 件のコメント:

コメントを投稿