読者です 読者をやめる 読者になる 読者になる

糸電話式のアレ

プログラミングのこと。毎日のこと。書いています。

Java SE 7 リリース & Java Edge活動再開記念イベント@名古屋まとめ(その1)

プログラミング まとめ JavaEdge Java7

Java SE 7 リリース & Java Edge活動再開記念イベントに参加してきました。
簡単ですが、まとめておきます。


今回のイベントでは、日本OracleJavaエヴァンジェリスト寺田さん
横河電機櫻庭さんのお話を聞くことができました。


この記事では、まず先にお話を頂いた寺田さんのお話についてまとめます。


余談ですが、出鼻で今回のイベントを主催していただいたJavaEdgeの方に知っている方がいて驚きました。
お互いに顔見知り程度で、良く知っているほどの仲ではないのですが、少し前に、同じ職場にいたのでびっくりしちゃいましたね。

寺田さんのお話

今回のお話は、こちらの寺田さんのブログにあるスライドと大体同じです。
お話のポイントは以下のとおり。

Javaの歴史上、Java7は何者か
  • Javaは進化のバージョンアップと改革のバージョンアップを繰り返してきた
    • 進化は小さな改善である。
    • 改革は言語仕様を大きく変える。
    • 今回リリースされたJava7は進化のバージョンアップである。
    • 1.2や5では改革が起こったため、互換性にはみな苦労しただろう。
    • 今回、言語仕様の大幅な変更はないという意味でJava5,6,7は同属で、互換性は高い。
    • Java8は改革の予定。
小さな改善(Project Coin)
  • switch構文でcase(文字列)とできるようになった。←使い道は「?」

つまり、誰得。

  • 数値リテラルの表現方法を追加した。
    • 数値リテラルに、0b0010というバイナリ表現を追加した。
    • 数値リテラルに、_で区切りを入れられるようになった。(例:int cardNum = 1234_5678_1254_5555;)

つまり、数値リテラルの意味を分かりやすく書けるようになった。

使いかたの想定(こういう設計が良いかはともかく)

// 区切りとバイナリ表記でマスクが分かりやすい
int filter = 0b0111_1100_1111_1111;

// メソッドAは、一つ目の_以降は計算に使用しない。
// メソッドBは、二つ目_以降は計算に使用しない。
// メソッドCは、すべて計算に使用する。
float pi = 3.14_15_92; 
  • try-catchの構文に書き方を追加して便利にした。
    • 複数の例外型の例外を一つのcatchで拾えるようにした。(例:catch(FileNotFoundException|IOException ex))
    • (例外の再送:上で紹介した記事にあるスライドにはあったが、今回なかった?)

つまり、例外処理を効率的に書けるようになった。

  • Genericsインスタンスの生成時に型推論を行う
    • 通称ダイヤモンド"<>"を使うと型推論する(例:Map> = new HashMap<>();)

つまり、Genericsを使う部分が読みやすくなった。

  • ストリームのクローズをtry-finallyでやっていたところをfinallyが要らなくなる構文を追加した
    • try(FileInputStream in = new FileInputStream("hoge.txt")){/*処理*/}とすることでinは最後に勝手に閉じられる。複数のStreamの宣言をするときは、";"で区切る。

つまり、クローズし忘れがなくなった。

より良いI/O機能の提供
  • NIO2.0ができた。
    • NIO(JSR51)で積み残したFileSystemAPIや非同期リクエストをサポートする。
    • パフォーマンスがいい。
    • ファイルツリーの操作ができるので、再帰処理的な探索処理Findを書かなくていい。
    • 無理なく移行したり、一部だけ利用するためにjava.io.Fileとjava.nio.file.Pathは双方向変換用のメソッドをもつ。
    • PathからPathへの相対パスとか取得できる。
    • 属性が操作できる。
    • 追加書き込みモードで書ける。
    • ファイルのコピーとかできる。
    • シンボリックリンクを扱える(Windowsだとだめ?)
    • etc...

つまり、ファイル操作において当たり前のことが当たり前にできるようになった+α

そのほか
  • パフォーマンスの改善
  • Fork/Joinの概念の導入
  • 動的言語のサポート
    • 1997年からの約束「JVMは多種の言語に開かれる」
  • Oracleが持つJVM、HotSpot(無償)とJRockit(有償)をそのうち統合HotRokitにする。
  • JavaOneが六本木ヒルズで。日本では7年ぶりに開催。来てね!

つまり、JavaOneに来い。


以上、寺田さんのブログ記事にあるスライドをみながら、覚えている範囲でまとめました。
なにか間違っていたらコメントください。