Java SE 9では、今までのJavaでは考えられなかった機構が取り入れられました。Java SE 8までは非公式に行われていた実験的なAPIの実装を、Java SE 9では「JEP 11: Incubator Modules」として公式にできるようになったのです。

 今までJava SEで公開されたAPIは、表向きにはすべて標準化されたAPIという扱いになっています。しかし、sun.misc.Unsafeクラスやsun.misc.BASE64Encoderクラスのように、標準化されていないAPIも存在しました。これらの非標準のAPIはドキュメントもそろっていないことが多く、知っている人だけが使えるAPIになっていました。

 ところがJava SE 9は、Project Jigsawの導入に伴い、パッケージ名がsunで始まるほとんどのAPIが使用できなくなっています。sun.misc.Unsafeクラスなど影響の大きいAPIは引き続き使用できますが、今後のリリースでは使えなくなる可能性が高いです。今まで抜け穴になっていた非標準のAPIを提供するすべがなくなってしまったわけです。

 とはいうものの、標準化は完了していないが、実験的に提供したいというAPIもあるかもしれません。例えば、BASE64Encoderクラスは非公開APIでしたが、その後標準化が進められ、Java SE 8からは標準のAPIとなっています*1

 このように、標準化されていないAPIを実験的にJava SEに含めることは、使用者からのフィードバックを集めやすくなり、使いやすいAPIにするためには有効です。Java SE 9では、HTTP/2 ClientがIncubator Moduleとして提供されます。そこで、今回からIncubator ModuleとHTTP/2 Clientを紹介していきます。

*1 もっとも、クラス名はjava.util.Base64.Encoderクラスに変更され、使い方も若干変わりました。