NetBeans 9.0 を試してみました

Oracleから譲渡されて約2年、Apache財団が「NetBeans 9.0」を正式リリース – 窓の杜

とのことで、取り急ぎ試してみました。

まだ実行形式インストーラーが用意されていないので、インストールは zip ファイルをばらすだけでショートカットも何もありません。

現時点で対応しているのは Java SE プロジェクトのみなので、普段 Java EE を使っている当方では本格的な移行はまだ先になりそうです。プラグインが揃った頃にまたチャレンジしましょう。

Java SE 8 の非互換性

まず Java SE 7 の java.lang.refrect.TypeVariable と Java SE 8 の java.lang.refrect.TypeVariable を比べてほしい。簡潔に書けば Java SE 8 で getAnnotatedBounds() が追加されたことが分かるはずである。

このように既存のインターフェースにメソッドが追加された場合、このインターフェースを実装するクラスはそのままでは Java SE 8 でコンパイルできなくなってしまう。通常なら追加されたメソッドの実装を追加すれば解決するのであるが、ここで getAnnotatedBounds() の戻り型 AnnotatedType[] に注目してほしい。java.lang.reflect.AnnotatedType は Java SE 8 で追加されたので、Java SE 7 には存在していない。つまり getAnnotatedBounds() を実装してしまうと Java SE 7 ではもうコンパイルできなくなってしまうのである。何という非互換性だろうか。

本来なら新しいメソッドを追加した別のインターフェースを追加するか、Java SE 7 のクラス実装のままでもコンパイル可能なようにデフォルト メソッドを提供するべきだったのでしょうが、そこまで気が回らなかったんでしょうかねえ。