地味Java

Javaの基本機能は一応JDK1.2で完成されており、一般的に利用されている機能範囲は大体この範囲ではないかと思われる。というのは、Javaの文法や基本ライブラリという意味ではJDK1.2で大体のことはできるし、Java技術の焦点がStrutsのようなフレームワークに移っているため、改めて新しいJavaを細かくフォローする必要性は薄い。また実務的には運用を念頭に置いた過去バージョンとの互換性を求められることもあり、新しいバージョンをフォローしてもすぐには使えないという事情もある。
もちろん、Java SE 5(JDK1.5)などで新規に追加されたメジャー機能は雑誌などでフォローできるのであるけれど、細かな機能拡張は見過ごされがちである。しかし、塵も積もれば、ということでJava SE 6(JDK1.6)までになると、細かな機能拡張の累積が設計に影響を与えるレベルのインパクトを持つまでになっている。

ということで、個人的に気付いたメモです。

String

JDK1.4/1.5ではString関係で大きな機能変更が行われている。

  • StringBuilderの導入(1.5)
  • CharSequenceの導入(1.4)
  • 正規表現エンジン(java.util.regex)の提供(1.4) [はっしーーさんの指摘により訂正(6/15)]

文字列処理は、これらの機能追加によって、作法が大幅に変わってくる。
また、文字列入出力ではjava.nioのCharBufferなどとの関係も意識が必要。

DOM Level3

JDK1.5でDOMのサポートレベルがDOM Level3になった。DOM Level2よりもかなり高機能になっている。
特にorg.w3c.dom.htmlはなかなか面白い存在である。NekoHTMLと組み合わせれば非XMLのブロウクンなHTMLも扱えるはずなので、"Web 2.0"的にも色々使えそう。

XPath

JDK1.5からDOM Level3の一環でorg.w3c.dom.xpathが、別口でjavax.xml.xpathがサポートされている。
XML処理でXPathはとても便利なので、XML処理に欠かせない機能となるはず。

XMLデータ型

JDK1.5からXMLデータ型が標準機能としてサポートされている。
ファクトリjavax.xml.datatype.DatatypeFactoryに加えて、既存のJavaクラスで表現できなかったデータ型としてjavax.xml.datatype.Duration, javax.xml.datatype.XMLGregorianCalendar, javax.xml.namespace.QNameが追加されているのも大きい。

URI

JDK1.4よりURIを表現するためのクラスjava.net.URIが導入されている。
パス名の操作、相対URIの処理など、高速に動作する便利機能満載であり、java.net.URLと違ってI/O処理が前提となっていない点も使い勝手がよい。Java5以降の開発ではmustアイテムである。

UUID

JDK1.5よりUUIDを表現するためのクラスjava.net.UUIDが追加されている。
分散環境でも使えるスケーラブルなID生成器として利用範囲は大きい。

JAF

JDK1.6よりJAF(Java Activation Framework)が標準に組み込まれるようになった。JAFそのものの利用はなくても、JAFに入っているjavax.activation.DataSourceやjavax.activation.MimeTypeといったインタフェース/クラスを標準的に使えるようになるのは大きい。

Naming

JDK1.3よりjavax.namingが標準に入っている。
コンポーネント疎結合を実現するのに重要な技術なので、標準に入ったのはマイ・フレームワーク開発者に朗報。

javax.sql.RowSet

ADOやActiveRecordなど、DBテーブルをバックエンドに置いた抽象レコードは、COBOLの時代から企業システム開発に欠かせないメカニズムであるけれど、そのJava版が、JDK1.4でjavax.sql.RowSetとしてひっそりとサポートされている。あまり話題になることはないが、マイ・フレームワークを作る時には意識しておくと面白い。javax.script(JDK1.6)からGroovyとかとうまく連携させることができれば、日の目を見るかもしれない。