Java のバージョンというものを考えてみる

はじめに

現在、私の Java 開発環境を Eclipse を使用したものに切り替えようとしています。どうせなら、ということで Java 環境も Java SE 6 Platform に入れ替えて(というか、選択的に追加して)、Eclipse 3.3 を導入してみました。

互換性に悩む

Java は、従来環境向けに作成されたコードを上位環境で動かすこと(上位互換)には長けています。完全ではないところもありますが、多くのコードに対して十分な互換性を提供しています。私が書いたコードの大半が現在の環境でも動作します。しかし…。

新たに書くコードをどうするか、という問題が私の前に横たわっています。

私はこれまで Java 1.1 を上限としてコードを書くように意識してきました(Servlet/JSP 環境向けを除く : なぜなら Servlet コンテナと JSP が一定以上の Java 規格を要求しているため)。これは Java ME 向けにコードを共有することを考えても、Microsoft VM for Java でも動作することを考えても、そして現在の Java SE 6 Platform でも動作することを考えても、最大公約的に動作するコードを記述することができるというのがその理由です。

警告の嵐

この最新の環境に私が以前書いたコードを持ち込むと警告の嵐です。主にコレクション系のクラスを使用しているところで Generics 的な記述をせずに使用していること、enum(列挙型)が導入され、enum が予約語になってしまい、Enumeration enum と宣言した多数の記述(これは従来決まり文句であったのです)が検出されたり、です。これらの警告を全て訂正すると、少なくとも Java 2 Platform SE 5.0 を必要とします。そして Eclipse の IDE 機能を用いてコードを構築していけばアノテーションをも受け入れることになります。

最新環境だけに目を向ければ、最良の強制的な施策であることは間違いないのですが、私はできれば、意味も無く最新バージョン向けのコードにしたくないと考えています。従来の記述の仕方で済むのであれば、できる限りそうしていきたいのです。もちろん、Eclipse にはそのために各種コンパイルオプションや警告の検出に関するオプションを提供しています。そしてアノテーションに関する部分は手動で削除してしまえばいいわけですが、ならば Eclipse を用いる価値はどこにあるのだろうか、と少々考えてしまいました。

試しているコード

現在 Eclipse で試しているコードは Java による OBEX 通信を行うライブラリです。このライブラリは Java Native Interface に準拠する Win32 DLL コードと Java によるプロトコル処理コードから構成されています。このライブラリは、これまで Microsoft VM for Java (JDK 1.1 相当) でも動作するように考慮した上で記述してきました(ここしばらくページを更新していませんが ^^;)。

これをリファクタリングしたり、拡張したり、を Eclipse の IDE の中でしていると、どうしても上位バージョン依存の記述を混入したり、依存したくなったりする誘惑にかられるのです。

私がただ、実際に求められている以上に古いバージョンの Java を気にしすぎているのではないか、今 Java を使っている方々は、ほとんどが Java 2 Platform SE 5.0 以降なのでは無いか、とか、考えてみたり、同時に、不要に新バージョン依存にする必要はないようなぁ、と堂々巡りの思考が渦巻いてしまっています。

まとめ

現時点ではどれが正当な答えなのか私自身には判断できていません。しかし、コードが必要とする以上のバージョンの環境を要求するのは記述側の都合であって、利用者側の都合ではないのだろうな、という思考が私の中で優勢であるように思えます。

Java に関わるコードを書いている皆様はどのようなお考えをお持ちでしょうか? とても興味が尽きないところです。

補記

仕事では環境を指定された Java コードを記述しているおり、理解もあります。その上で、自前のコードとなる、自分の設定した「枠」が見えてくる、という話です。

コメントを残す

メールアドレスが公開されることはありません。