답변:
이 기사는 확인 1.5
하거나1.6
에서는 올바른 버전 이름 지정 규칙을 따르므로 접두어가 작동해야한다고 .
java.version
시스템 속성"java.version
시스템 속성"java.version
모든 JVM에 존재 하는 시스템 특성 입니다. 두 가지 가능한 형식이 있습니다.
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()
자바 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과 작업하십시오.