উত্তর:
এই নিবন্ধগুলিতে প্রস্তাবিত মনে হয় যে পরীক্ষা করা 1.5
বা 1.6
উপসর্গটি পরীক্ষা করা উচিত, কারণ এটি যথাযথ সংস্করণ নামকরণ কনভেনশন অনুসরণ করে।
java.version
সিস্টেম সম্পত্তি"java.version
সিস্টেম সম্পত্তি"java.version
এমন একটি সিস্টেম সম্পত্তি যা প্রতিটি জেভিএম-এ বিদ্যমান। এটির জন্য দুটি সম্ভাব্য বিন্যাস রয়েছে:
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.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