Muszę obejść błąd Javy w JDK 1.5, który został naprawiony w wersji 1.6. Używam następującego warunku:
if (System.getProperty("java.version").startsWith("1.5.")) {
...
} else {
...
}
Czy to zadziała w przypadku innych maszyn JVM? Czy jest lepszy sposób, aby to sprawdzić?
java.version
to właściwość systemowa, która istnieje w każdej maszynie JVM. Istnieją dwa możliwe formaty: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
Oto sztuczka, aby wyodrębnić wersję główną: Jeśli jest to
1.x.y_z
ciąg wersji, wyodrębnij znak pod indeksem 2 ciągu. Jeśli jest tox.y.z
ciąg wersji, przytnij ciąg do pierwszego znaku kropki, jeśli taki istnieje.Teraz możesz sprawdzić wersję o wiele wygodniej:
źródło
double version = 1.6
iDouble.parseDouble("1.6")
nadal powinien dawać ten sam wzór bitowy, prawda? Ponieważ nie wykonujemy arytmetyki na liczbie (tylko proste porównanie), funkcja even == będzie działać zgodnie z oczekiwaniami.A co z pobieraniem wersji z meta informacji o pakiecie:
Wyświetla coś takiego:
1.7.0_13
źródło
Runtime.class.getPackage().getSpecificationVersion()
Runtime.class.getPackage().getImplementationVersion()
wydaje się wracaćnull
na JDK9.Runtime.version()
Od wersji Java 9 możesz użyć
Runtime.version()
, która zwracaRuntime.Version
:źródło
Najprostszy sposób ( java.specification.version ):
lub coś takiego ( java.version ):
lub jeśli chcesz to wszystko zepsuć ( java.runtime.version ):
źródło
Tylko uwaga, że w Javie 9 i nowszych konwencja nazewnictwa jest inna.
System.getProperty("java.version")
zwraca"9"
raczej niż"1.9"
.źródło
Nie działa, trzeba
--pos
ocenić podwójnie:źródło
Przykład dla Apache Commons Lang:
źródło
version < 1.4f
... Co się stanie, kiedyversion = 1.4f
?version <= 1.4f
.. NiestetySystemUtils
nie podajeisJavaVersionLessThan
metody, ale potem (na szczęście) możesz również umieścić starszy kod welse
bloku, który jest bardziej przejrzysty.1.4f
wrócić do starszego kodu?if (SystemUtils.IS_JAVA_1_5) { /* 1.5 specific code */ } else if (SystemUtils.isJavaVersionAtLeast(1.6f)) { /* modern code */ } else { /* fall back to legacy code */ }
. Konkretny kod powyżej, kod ogólny poniżej, kod awaryjny na samym dole.Oto implementacja w JOSM :
źródło
Jeśli możesz mieć zależność od narzędzi Apache, możesz użyć org.apache.commons.lang3.SystemUtils.
źródło
Nie wiem, jak to sprawdzić, ale to: http://java.sun.com/j2se/1.5.0/docs/api/java/lang/System.html#getProperties () "oznacza, że" java.version "jest standardową właściwością systemową, więc spodziewałbym się, że tak współpracować z innymi maszynami JVM.
źródło
Oto odpowiedź z @mvanle, przekonwertowana na Scala:
scala> val Array(javaVerPrefix, javaVerMajor, javaVerMinor, _, _) = System.getProperty("java.runtime.version").split("\\.|_|-b") javaVerPrefix: String = 1 javaVerMajor: String = 8 javaVerMinor: String = 0
źródło