2013-06-18 6 views
8

संक्षिप्त प्रश्न: यदि मैं अपेक्षाकृत "नाबालिग" जावा 7 भाषा सुविधाओं का उपयोग जावा 6 में पहले अनुपलब्ध करता हूं, जैसे कि कोशिश-म्यूटिकैच ब्लॉक ... क्या इसका मतलब यह है कि मेरा प्रोग्राम मशीनों में नहीं चलेगा जेआरई 6 या जेआरई 5 के साथ संकलित होने के बाद स्थापित किया गया है? यदि यह सही है, तो जावा 7 स्रोत कोड को बदलने के बिना JRE6 .jar निष्पादन योग्य बनाने का कोई त्वरित तरीका है (जिस तरह से, केवल जावा 7 फीचर जिसका उपयोग यह होगा-कोशिश करें मल्टीचैच ब्लॉक)?जावा 7 भाषा पिछड़ा संगतता

उत्तर

8

से सही है। आप सही हैं। मल्टी-कैच जावा 7 भाषा सुविधा है और इसे जावा 6 (या पहले) जेवीएम संगत बाइटकोड में संकलित करने का कोई तरीका नहीं है। (उदाहरण के लिए, बहु पकड़)

javac -source 1.6 -target 1.6 MyJavaFile.java

जब आप एक जावा 7 भाषा सुविधा को संकलित करने का प्रयास आप:

एक जावा 7 संकलक का उपयोग करना, निम्नलिखित आप जावा 6 संगत बाईटकोड संकलित करने के लिए अनुमति देता है मिलती है:

roach$ javac -source 1.6 -target 1.6 test.java 
warning: [options] bootstrap class path not set in conjunction with -source 1.6 
test.java:9: error: multi-catch statement is not supported in -source 1.6 
    } catch (NullPointerException | BufferOverflowException ex) {} 
           ^
    (use -source 7 or higher to enable multi-catch statement) 
1 error 
1 warning 

(क्या है कि warning साधन के बारे में अधिक के लिए: https://blogs.oracle.com/darcy/entry/bootclasspath_older_source - यह इस चर्चा से प्रासंगिक नहीं है)

012,351,

आप 1.7 करने के लिए -source ध्वज को बदलते हैं तो आपको मिलेंगे:

source release 1.7 requires target release 1.7

क्योंकि ... तुम जावा 7 स्रोत संकलन नहीं कर सकते हैं (उदाहरण के लिए स्रोत जिसमें जावा 7 विशेषताएं हैं) जावा 6 संगत बाइटकोड में।

आप जावा 7 के साथ यह संकलन (कोई -source या -target ध्वज के साथ) यदि आप जावा 7 बाईटकोड जो एक < जावा 7 JVM पर नहीं चलाया जा सकता मिल जाएगा। और यदि आप ऐसा करने का प्रयास करते हैं तो आपको एक त्रुटि मिल जाएगी जो आपको बताती है कि संस्करण मेल नहीं खाते:

roach$ /Library/Java/Home/bin/java net.mostlyharmless.multicatch.App
Exception in thread "main" java.lang.UnsupportedClassVersionError: net/mostlyharmless/multicatch/App : Unsupported major.minor version 51.0

7

आप जावा में जावा के साथ स्रोत संकलन 7 में 6 .class क्योंकि इस

javac -source 1.7 -target 1.6 Test.java 

source release 1.7 requires target release 1.7 त्रुटि पैदा करता है नहीं कर सकते। ऐसा इसलिए है क्योंकि इनमें से कुछ 1.7 विशेषताएं केवल जावा 7 कक्षाओं के साथ काम कर सकती हैं। उदाहरण के लिए try-with-resourcesThrowable.addSuppressed विधि का उपयोग केवल 1.7

संबंधित मुद्दे