উত্তর:
এই নিবন্ধগুলিতে প্রস্তাবিত মনে হয় যে পরীক্ষা করা 1.5বা 1.6উপসর্গটি পরীক্ষা করা উচিত, কারণ এটি যথাযথ সংস্করণ নামকরণ কনভেনশন অনুসরণ করে।
java.versionসিস্টেম সম্পত্তি"java.versionসিস্টেম সম্পত্তি"java.versionএমন একটি সিস্টেম সম্পত্তি যা প্রতিটি জেভিএম-এ বিদ্যমান। এটির জন্য দুটি সম্ভাব্য বিন্যাস রয়েছে:
1.6.0_23, 1.7.0, 1.7.0_80,1.8.0_2119.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()nullJDK9 এ ফিরে আসবে বলে মনে হচ্ছে ।
Runtime.version()জাভা 9-এর পর থেকে, আপনি ব্যবহার করতে পারেন Runtime.version(), যা ফেরত দেয় Runtime.Version:
Runtime.Version version = Runtime.version();
সবচেয়ে সহজ উপায় ( java.specifications.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];
কেবল একটি নোট যে জাভা 9 এবং তারপরে, নামকরণের কনভেনশনটি আলাদা। পরিবর্তে System.getProperty("java.version")ফিরে ।"9""1.9"
কাজ করে না, --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;
}
অ্যাপাচি কমন্স ল্যাংয়ের উদাহরণ:
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 "একটি স্ট্যান্ডার্ড সিস্টেমের সম্পত্তি তাই আমি এটি আশা করবো অন্যান্য জেভিএমের সাথে কাজ করুন।
এখানে @mvanle থেকে উত্তর, স্কালায় রূপান্তরিত হয়েছে:
scala> val Array(javaVerPrefix, javaVerMajor, javaVerMinor, _, _) = System.getProperty("java.runtime.version").split("\\.|_|-b")
javaVerPrefix: String = 1
javaVerMajor: String = 8
javaVerMinor: String = 0