मुझे पता चला है कि ग्रहण (ग्रहण कंपाइलर का उपयोग करके) में मैं कुछ जावा 7 भाषा विशेषताओं का उपयोग कर सकता हूं लेकिन अभी भी जावा 6 क्लास फाइलें बना सकता हूं। नीचे दी गई छवि में, आप दो जावा 7 भाषा विशेषताओं को देख सकते हैं जिन्हें जावा 6 क्लास फ़ाइल के रूप में सफलतापूर्वक संकलित किया गया है। हालांकि, अन्य जावा 7 फीचर्स, जो टिप्पणी करते हैं, संकलित नहीं करते हैं।ग्रहण मुझे जावा 6 क्लास फाइलों में कुछ जावा 7 भाषा सुविधाओं को संकलित क्यों करता है?
मेरी धारणा यह है कि ग्रहण यह निर्धारित कर रहा है कि जावा 7 भाषा विशेषताएं जावा 6 जेवीएम के साथ संगत हैं और जो नहीं हैं। उदाहरण के लिए, सामान्य प्रकार JComboBox केवल एक संकलन (और रनटाइम नहीं) सुविधा है, इसलिए मैं कल्पना कर सकता हूं कि यह कैसे संगत होगा। स्विच स्ट्रिंग सुविधा हालांकि मुझे लगता है कि होगा बाइट कोड में मतभेद बनाने के लिए और नए JVM सुविधाओं पर निर्भर हो सकता है, लेकिन मैं गलत हो सकता है ...
मेरे सवालों का:
ग्रहण वास्तव में बहुत चालाक पता करने के लिए है जावा 7 भाषा विशेषताएं जावा 6 क्लास फाइलों में संकलित करने में सक्षम हैं और नहीं हैं?
नीचे दिया गया उदाहरण स्पष्ट रूप से 1.6 स्रोत संगत नहीं है, तो "स्रोत संगतता" को 1.6 तक क्यों सेट करना त्रुटि उत्पन्न नहीं करता है?
यह "चाल" मुझे कम से कम कुछ जावा 7 भाषा सुविधाओं का उपयोग करने देता है और अभी भी जावा 6 क्लास फाइलें बनाते हैं। स्रोत 1.7 के साथ जावैक का उपयोग करना और लक्ष्य 1.6 विफल हो जाएगा, तो यह क्यों काम करता है? क्या Ecilpse कंपाइलर में एक सुविधा है जो javac नहीं करता है?
तुलना यहाँ रखने के लिए परिणाम जब मैं, एक जावा 6 संकलक करने के लिए स्विच के रूप में उम्मीद है।