回答:
これらの記事は、適切なバージョンの命名規則に従っているため、チェック1.5
または1.6
プレフィックスが機能することを示唆しているようです。
java.version
システムプロパティ」java.version
システムプロパティ」java.version
あるシステムプロパティすべてのJVMに存在しています。可能な形式は2つあります。
1.6.0_23
、1.7.0
、1.7.0_80
、1.8.0_211
9.0.1
、11.0.4
、12
、12.0.1
メジャーバージョンを抽出する方法は次のとおりです。1.x.y_z
バージョン文字列の場合は、文字列のインデックス2にある文字を抽出します。x.y.z
バージョン文字列の場合、文字列が存在する場合は、最初のドット文字にカットします。
private static int getVersion() {
String version = System.getProperty("java.version");
if(version.startsWith("1.")) {
version = version.substring(2, 3);
} else {
int dot = version.indexOf(".");
if(dot != -1) { version = version.substring(0, dot); }
} return Integer.parseInt(version);
}
これで、バージョンをより快適に確認できます。
if(getVersion() < 6) {
// ...
}
double version = 1.6
とDouble.parseDouble("1.6")
、まだ右、同じビットパターンを生成する必要がありますか?数値の演算は行わないため(単純な比較のみ)、==でも期待どおりに機能します。
パッケージのメタ情報からバージョンを取得するのはどうですか?
String version = Runtime.class.getPackage().getImplementationVersion();
次のようなものを出力します。
1.7.0_13
Runtime.class.getPackage().getSpecificationVersion()
Runtime.class.getPackage().getImplementationVersion()
null
JDK9 に戻るようです。
Runtime.version()
Java 9以降ではRuntime.version()
、を返すを使用できますRuntime.Version
。
Runtime.Version version = Runtime.version();
最も簡単な方法(java.specification.version):
double version = Double.parseDouble(System.getProperty("java.specification.version"));
if (version == 1.5) {
// 1.5 specific code
} else {
// ...
}
または(java.version)のようなもの:
String[] javaVersionElements = System.getProperty("java.version").split("\\.");
int major = Integer.parseInt(javaVersionElements[1]);
if (major == 5) {
// 1.5 specific code
} else {
// ...
}
または、すべてを分割したい場合(java.runtime.version):
String discard, major, minor, update, build;
String[] javaVersionElements = System.getProperty("java.runtime.version").split("\\.|_|-b");
discard = javaVersionElements[0];
major = javaVersionElements[1];
minor = javaVersionElements[2];
update = javaVersionElements[3];
build = javaVersionElements[4];
動作しません、--pos
二重を評価する必要があります:
String version = System.getProperty("java.version");
System.out.println("version:" + version);
int pos = 0, count = 0;
for (; pos < version.length() && count < 2; pos++) {
if (version.charAt(pos) == '.') {
count++;
}
}
--pos; //EVALUATE double
double dversion = Double.parseDouble(version.substring(0, pos));
System.out.println("dversion:" + dversion);
return dversion;
}
Apache Commons Langの例:
import org.apache.commons.lang.SystemUtils;
Float version = SystemUtils.JAVA_VERSION_FLOAT;
if (version < 1.4f) {
// legacy
} else if (SystemUtils.IS_JAVA_1_5) {
// 1.5 specific code
} else if (SystemUtils.isJavaVersionAtLeast(1.6f)) {
// 1.6 compatible code
} else {
// dodgy clause to catch 1.4 :)
}
version < 1.4f
...ときに何が起こりversion = 1.4f
ますか?
version <= 1.4f
..に変更できます。残念ながらメソッドSystemUtils
は提供されていませんisJavaVersionLessThan
が、(幸いなことに)従来のコードをelse
ブロックに入れることもできます。
1.4f
レガシーコードにフォールバックしないでください。
if (SystemUtils.IS_JAVA_1_5) { /* 1.5 specific code */ } else if (SystemUtils.isJavaVersionAtLeast(1.6f)) { /* modern code */ } else { /* fall back to legacy code */ }
。上記の特定のコード、以下の一般的なコード、一番下のフォールバックコード。
JOSMでの実装は次のとおりです。
/**
* Returns the Java version as an int value.
* @return the Java version as an int value (8, 9, etc.)
* @since 12130
*/
public static int getJavaVersion() {
String version = System.getProperty("java.version");
if (version.startsWith("1.")) {
version = version.substring(2);
}
// Allow these formats:
// 1.8.0_72-ea
// 9-ea
// 9
// 9.0.1
int dotPos = version.indexOf('.');
int dashPos = version.indexOf('-');
return Integer.parseInt(version.substring(0,
dotPos > -1 ? dotPos : dashPos > -1 ? dashPos : 1));
}
これをチェックする別の方法はわかりませんが、これは次のとおりです。 http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties() "は、" java.version "が標準のシステムプロパティであることを意味するので、他のJVMで動作します。