私の歴史と今

振り返ると恥ずかしくなるのが私の歴史。だけどそのときは真面目に書いていた訳でね。そんな今の私を書いていく。

クラスファイルのバージョン

javac -source -targetの動作を調べた。

普通のソースの場合

1.2 1.3 1.4 1.5 1.6
1.2 46.0 47.0 48.0 49.0 50.0
1.3 × 47.0 48.0 49.0 50.0
1.4 × × 48.0 49.0 50.0
1.5 × × × 49.0 50.0
1.6 × × × × 50.0

左がsourceで、上がtarget。
値は、クラスファイルのマジックナンバー(CAFEBABE)の後に埋め込まれたのバージョン番号。
1.2準拠のソースから、1.6のクラスファイルを作成できるが、1.6のソースから、1.5以下のクラスファイルを作成できない。1.6の新機能を使用したソースを、5.0の実行環境で動かすことはできないのが当然。

Genericsを含む場合

ちなみに、Genericsを含んだソースのコンパイルは、以下の結果となる。

1.2 1.3 1.4 1.5 1.6
1.2 NG NG NG NG NG
1.3 × NG NG NG NG
1.4 × × NG NG NG
1.5 × × × OK OK
1.6 × × × × OK

Genericsは1.5の新機能なので、-sourceは、1.5以上じゃないと、コンパイルできない。もちろん、-targetも1.5以上になる。