जेडीके 5 के तहत निर्मित एक "मास्टर" स्रोत रूट रखें एक दूसरी समांतर स्रोत रूट जोड़ें जिसे जेडीके 6 या उसके बाद के तहत बनाना है। (कोई ओवरलैप नहीं होना चाहिए, यानी दोनों में कोई कक्षा मौजूद नहीं है।) दोनों के बीच प्रविष्टि बिंदु को परिभाषित करने के लिए एक इंटरफेस का उपयोग करें, और प्रतिबिंब का एक छोटा सा हिस्सा।
उदाहरण के लिए:
---%<--- main/RandomClass.java
// ...
if (...is JDK 6+...) {
try {
JDK6Interface i = (JDK6Interface)
Class.forName("JDK6Impl").newInstance();
i.browseDesktop(...);
} catch (Exception x) {
// fall back...
}
}
---%<--- main/JDK6Interface.java
public interface JDK6Interface {
void browseDesktop(URI uri);
}
---%<--- jdk6/JDK6Impl.java
public class JDK6Impl implements JDK6Interface {
public void browseDesktop(URI uri) {
java.awt.Desktop.getDesktop().browse(uri);
}
}
---%<---
आप एक IDE में अलग परियोजनाओं अलग JDKs का उपयोग कर, आदि के रूप में इन कॉन्फ़िगर कर सकता हैमुद्दा यह है कि मुख्य रूट को स्वतंत्र रूप से संकलित किया जा सकता है और यह बहुत स्पष्ट है कि आप किस रूट में उपयोग कर सकते हैं, जबकि यदि आप एक ही रूट के अलग-अलग हिस्सों को अलग-अलग संकलित करने का प्रयास करते हैं तो यह जेडीके 6 के गलती से "रिसाव" उपयोग करना बहुत आसान है गलत फाइलों में।
इस तरह कक्षा.forName का उपयोग करने के बजाय, आप किसी भी प्रकार की सेवा पंजीकरण प्रणाली का उपयोग भी कर सकते हैं - java.util.ServiceLoader (यदि मुख्य जेडीके 6 का उपयोग कर सकता है और आप जेडीके 7 के लिए वैकल्पिक समर्थन चाहते थे!), नेटबीन लुकअप, वसंत, इत्यादि।
एक ही तकनीक का उपयोग नए जेडीके की बजाय वैकल्पिक पुस्तकालय के लिए समर्थन बनाने के लिए किया जा सकता है।
स्रोत
2008-09-16 16:37:57
क्या यह जावा कंपाइलर्स का एक दस्तावेज व्यवहार है? –
यह उत्तर गलत लगता है। मैंने एक त्वरित जावा ऐप किया जो java.io.Console और उपर्युक्त दृष्टिकोण का उपयोग करता था। संकलक 1.5 में विफल होने के साथ 1.5 में विफल रहा: Test.java:8: प्रतीक नहीं मिल सकता: विधि कंसोल() स्थान: कक्षा java.lang.System – noahlz
मैं देख सकता था कि आप 1.6 में कैसे संकलित कर सकते हैं और कुछ को बहिष्कृत कर सकते हैं 1.5 जेवीएम में चलते समय रनटाइम फीचर्स। बेशक, आपको "अवैध मामूली संस्करण 49.0" त्रुटि से बचने के लिए 1.5 जेवीएम बाइटकोड प्रारूप में फिर से संकलित करने की आवश्यकता होगी। उस दृष्टिकोण के लिए, यह समाधान काम कर सकता है। – noahlz