Saya perlu mengatasi bug Java di JDK 1.5 yang diperbaiki di 1.6. Saya menggunakan kondisi berikut:
if (System.getProperty("java.version").startsWith("1.5.")) {
...
} else {
...
}
Apakah ini akan bekerja untuk JVM lain? Apakah ada cara yang lebih baik untuk memeriksa ini?
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.Sekarang Anda dapat memeriksa versi jauh lebih nyaman:
sumber
double version = 1.6
danDouble.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:
Mencetak sesuatu seperti:
1.7.0_13
sumber
Runtime.class.getPackage().getSpecificationVersion()
Runtime.class.getPackage().getImplementationVersion()
tampaknya kembalinull
pada JDK9.Runtime.version()
Karena Java 9, Anda dapat menggunakan
Runtime.version()
, yang mengembalikanRuntime.Version
:sumber
Cara paling sederhana ( java.specification.version ):
atau sesuatu seperti ( java.version ):
atau jika Anda ingin memecah semuanya ( java.runtime.version ):
sumber
Catat saja bahwa di Java 9 dan di atasnya, konvensi penamaan berbeda.
System.getProperty("java.version")
mengembalikan"9"
daripada"1.9"
.sumber
Tidak berfungsi, perlu
--pos
mengevaluasi ganda:sumber
Contoh untuk Apache Commons Lang:
sumber
version < 1.4f
... Apa yang terjadi kapanversion = 1.4f
?version <= 1.4f
.. SayangnyaSystemUtils
tidak menyediakanisJavaVersionLessThan
metode, tetapi kemudian (untungnya) Anda juga bisa memasukkan kode lama ke dalamelse
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 :
sumber
Jika Anda dapat memiliki ketergantungan pada utilitas apache, Anda dapat menggunakan org.apache.commons.lang3.SystemUtils.
sumber
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.
sumber
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
sumber