2009-12-24 8 views
5

क्या ग्रोवी जावा का सुपरसैट अभी तक है? यदि नहीं, ग्रोवी और जावा के बीच असंगतता क्या हैं?जावा के ग्रोवी सुपरसैट

सुपरसेट द्वारा, मेरा मतलब स्रोत पिछड़ा संगतता है, इस अर्थ में: आप जावा फ़ाइल ले सकते हैं और इसे ग्रोवी स्रोत फ़ाइल के रूप में संकलित कर सकते हैं, और यह पहले जैसा ही काम करेगा। यह सीखने की अवस्था को कम करने के लिए जावा के समान बनाने के लिए ग्रोवी का लक्ष्य रहा है। हालांकि, ग्रोवी 1.7 तक जो अज्ञात आंतरिक वर्गों और इस तरह के लिए कोई समर्थन नहीं था।

मैंने कुछ लेख ऐसे दावा किए हैं, लेकिन मैंने इसे Groovy website पर सत्यापित नहीं देखा है।

+1

वास्तव में, मुझे यकीन है कि मैं सवाल समझ में आ नहीं कर रहा हूँ। वास्तव में "स्रोत संगत" के साथ आपका क्या मतलब है? –

उत्तर

7

क्या ग्रोवी अभी तक जावा के साथ संगत (यानी स्रोत संगत) है? यदि नहीं, तो अब जावा और ग्रोवी के बीच असंगतताएं क्या हैं?

ग्रोवी "जावा" फैलाता है और ग्रोवी और जावा (जावा कंपेलर द्वारा एक ग्रोवी फ़ाइल संकलित नहीं किया जा सकता है) के बीच अंतर हैं। पृष्ठ Differences from Java जावा और ग्रोवी के बीच सभी प्रमुख अंतर सूचीबद्ध करता है। उस ने कहा, ग्रोवी कंपाइलर एक ग्रोवी फ़ाइल को एक .class फ़ाइल में परिवर्तित कर सकता है जिसे जावा इंटिप्टर का उपयोग करके चलाया जा सकता है (इसे क्लासस्पैट पर होने के लिए groovy-all-VERSION.jar की आवश्यकता है)। क्या यह सवाल का जवाब देता है?

+0

धन्यवाद, मैंने अपने बिंदु को स्पष्ट करने के लिए प्रश्न अपडेट किया। – notnoop

5

एक अंतर मैंने उस पृष्ठ पर उल्लिखित नहीं देखा है जिस तरह से ओवरलोडेड विधियों का समाधान किया गया है। जावा में, यह एक तर्क के संकलन-समय प्रकार पर आधारित है, जबकि ग्रोवी में यह रनटाइम प्रकार पर आधारित है। उदाहरण के लिए मान लीजिए कि आप एक कक्षा में इन विधियों है

void doIt(Object o) {} // Java 
void doIt(String s) {} // Groovy 

निम्नलिखित कोड:

Object o = "foo"; 

वस्तु पैरामीटर अगर साथ स्ट्रिंग पैरामीटर अगर ग्रूवी कोड के साथ विधि, और विधि आह्वान करेंगे जावा कोड । ग्रोवी इस सुविधा को "बहु-विधियों" कहते हैं।

+0

धन्यवाद। इसे साहित्य में "बहु-विधि गतिशील प्रेषण" के रूप में जाना जाता है। – notnoop

1

ग्रोवी में, पैकेज एक्सेस के साथ गुण (ठीक है, मुझे शायद उस विशेषता या उदाहरण चर को कॉल करना चाहिए) कक्षा फ़ाइल में स्वचालित रूप से सेटटर और गेटर विधियों को संकलित करें।

इसका मतलब है कि यदि आप * .java फ़ाइल को * .groovy फ़ाइल के रूप में सहेजते हैं और आपके पास "स्ट्रिंग नाम" जैसी विशेषता है; ग्रोवी कंपाइलर एक सेटर और गेटर उत्पन्न करेगा। जावा कंपाइलर नहीं होगा। यदि आपके पास पहले से ही आपकी जावा फ़ाइल में गेटर है, तो ग्रोवी कंपाइलर भी डुप्लिकेट विधि परिभाषा के बारे में शिकायत कर सकता है।

हालांकि दुर्लभ मामलों के लिए अधिकांश * .java फ़ाइलों को बिना किसी समस्या के ग्रोवी कंपाइलर द्वारा संकलित किया जाता है।

एंजेलो

0

एक और उस पृष्ठ पर सूचीबद्ध नहीं अंतर अर्धविराम का उपयोग है। प्रत्येक पंक्ति अर्धविराम के साथ समाप्त करने में सक्षम होना चाहिए (लेकिन इसे छोड़ा जा सकता है)।

निम्नलिखित कोड ग्रूवी पर संकलन नहीं है, लेकिन जावा पर संकलित:

String s = "hello " 
+ "world"; 
println(s); // Assuming there is a local method with name "println" (available by default in Groovy but you have to create it in Java)