Javaのバージョン関連のシステムプロパティ
Javaのバージョン関連のシステムプロパティには以下のようなものがあります。
// JREのバージョン System.out.println(System.getProperty("java.version")); // JREの仕様バージョン System.out.println(System.getProperty("java.specification.version")); // JVMの実装バージョン System.out.println(System.getProperty("java.vm.version")); // Javaクラスの形式のバージョン番号 System.out.println(System.getProperty("java.class.version"));
上記コードの実行結果は、JDK1.6環境で以下のような出力となります。
1.6.0_12 1.6 11.2-b01 50.0
Java9 以降については以下を参照してください。
ランタイムのバージョン判定
ランタイムのバージョンをプログラム中で判定するには、例えば1.4以上の判定は以下のようになります。
private static final boolean JRE14 = (Double.parseDouble(System.getProperty("java.specification.version")) >= 1.4); ・・・ if (JRE14) { ・・・ }
Javaクラスのバージョン判定
Javaクラスの形式のバージョン番号は以下の通り
private static final double CLASS_VERSION_4 = 48.0; private static final double CLASS_VERSION_5 = 49.0; private static final double CLASS_VERSION_6 = 50.0; private static final double CLASS_VERSION_7 = 51.0;
なので、クラスのバージョンの判定は以下のようになります。
private static final boolean JDK6 = (Double.parseDouble(System.getProperty("java.class.version")) >= CLASS_VERSION_6); ・・・ if (JRE14) { ・・・ }
JDKソースバージョン
1.6から追加された javax.lang.model.SourceVersion というenumで判断できます。
//実行環境で完全にサポートされている最新のソースバージョン
System.out.println(SourceVersion.latestSupported().name());
JDK6 の場合以下のように表示されます。
RELEASE_6
対応は以下
RELEASE_0:オリジナルのバージョン
RELEASE_1:Java Platform 1.1
RELEASE_2:Java 2 Platform, Standard Edition v 1.2
RELEASE_3:Java 2 Platform, Standard Edition v 1.3
RELEASE_4:Java 2 Platform, Standard Edition v 1.4
RELEASE_5:Java 2 Platform, Standard Edition 5.0
RELEASE_6:Java Platform, Standard Edition 6
上と同じような書き方にするなら以下のようになります。
private static final boolean JSE6 = (SourceVersion.latestSupported().ordinal() >= 6); ・・・ if (JRE14) { ・・・ }
enum の ordinal() を条件判定で使っちゃうのは望ましくはないですが、並び順が変更されることは無いハズなので問題ないでしょう。
javax パッケージなので使わない方が吉です。