Jawaban:
Artikel-artikel ini tampaknya menyarankan bahwa memeriksa 1.5
atau 1.6
awalan harus bekerja, karena mengikuti konvensi penamaan versi yang tepat.
java.version
properti sistem"java.version
properti sistem"java.version
adalah properti sistem yang ada di setiap JVM. Ada dua format yang memungkinkan untuk itu:
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
Berikut adalah trik untuk mengekstrak versi utama: Jika itu adalah 1.x.y_z
string versi, ekstrak karakter di indeks 2 dari string. Jika ax.y.z
string versi, potong string ke karakter titik pertamanya, jika ada.
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);
}
Sekarang Anda dapat memeriksa versi jauh lebih nyaman:
if(getVersion() < 6) {
// ...
}
double version = 1.6
dan Double.parseDouble("1.6")
masih harus menghasilkan pola bit yang sama, kan? Karena kami tidak melakukan aritmatika pada angka (hanya perbandingan sederhana), bahkan == akan berfungsi seperti yang diharapkan.
Bagaimana dengan mendapatkan versi dari paket meta info:
String version = Runtime.class.getPackage().getImplementationVersion();
Mencetak sesuatu seperti:
1.7.0_13
Runtime.class.getPackage().getSpecificationVersion()
Runtime.class.getPackage().getImplementationVersion()
tampaknya kembali null
pada JDK9.
Runtime.version()
Karena Java 9, Anda dapat menggunakan Runtime.version()
, yang mengembalikan Runtime.Version
:
Runtime.Version version = Runtime.version();
Cara paling sederhana ( java.specification.version ):
double version = Double.parseDouble(System.getProperty("java.specification.version"));
if (version == 1.5) {
// 1.5 specific code
} else {
// ...
}
atau sesuatu seperti ( java.version ):
String[] javaVersionElements = System.getProperty("java.version").split("\\.");
int major = Integer.parseInt(javaVersionElements[1]);
if (major == 5) {
// 1.5 specific code
} else {
// ...
}
atau jika Anda ingin memecah semuanya ( 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];
Catat saja bahwa di Java 9 dan di atasnya, konvensi penamaan berbeda. System.getProperty("java.version")
mengembalikan "9"
daripada "1.9"
.
Tidak berfungsi, perlu --pos
mengevaluasi ganda:
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;
}
Contoh untuk 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
... Apa yang terjadi kapan version = 1.4f
?
version <= 1.4f
.. Sayangnya SystemUtils
tidak menyediakan isJavaVersionLessThan
metode, tetapi kemudian (untungnya) Anda juga bisa memasukkan kode lama ke dalam else
blok, yang lebih bersih.
1.4f
kembali ke kode lama?
if (SystemUtils.IS_JAVA_1_5) { /* 1.5 specific code */ } else if (SystemUtils.isJavaVersionAtLeast(1.6f)) { /* modern code */ } else { /* fall back to legacy code */ }
. Kode khusus di atas, kode umum di bawah, kode cadangan di bagian paling bawah.
Inilah implementasinya di 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));
}
Tidak tahu cara lain untuk memeriksa ini, tetapi ini: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties () "menyiratkan" java.version "adalah properti sistem standar, jadi saya berharap untuk bekerja dengan JVM lainnya.
Ini jawaban dari @mvanle, dikonversi ke Scala:
scala> val Array(javaVerPrefix, javaVerMajor, javaVerMinor, _, _) = System.getProperty("java.runtime.version").split("\\.|_|-b")
javaVerPrefix: String = 1
javaVerMajor: String = 8
javaVerMinor: String = 0