2012-10-29 11 views
8

सी # के विस्तार विधियां वाक्य रचनात्मक चीनी जोड़ने के लिए बहुत अच्छी हैं। पुस्तकालय डेवलपर्स को उनके इंटरफेस में विधियों को जोड़ने की अनुमति देने के लिए जावा एक्सटेंशन विधियां बहुत अच्छी हैं।जावा के पास गैर-लाइब्रेरी डेवलपर्स के विस्तार विधियों का उपयोग करने का कोई तरीका होगा?

मैं एक गैर पुस्तकालय जावा डेवलपर हूं और जानता हूं कि मैं पुस्तकालयों से नई कार्यक्षमता प्राप्त करने से बहुत सारे लाभ प्राप्त करूंगा, लेकिन मैं अभी भी सी # एक्सटेंशन विधियों की सिंटैक्टिक चीनी क्षमताओं को प्राप्त करना चाहता हूं।

क्या यह जावा के भविष्य के संस्करणों में संभव है, या यह संभव होगा?

उदाहरण के लिए: मैं स्ट्रिंग वर्ग के लिए तरीकों को जोड़ने के लिए ...

String data = StringUtils.capitalize("abcd"); // instead of this 
String data = "abcd".capitalize() // I would like to do this 

कृपया इस विशिष्ट उदाहरण पर ध्यान केंद्रित नहीं है, मैं केवल कार्यक्षमता के वर्ग मैं करने में सक्षम होना चाहता हूँ दिखा रहा चाहते हैं प्राप्त।

+0

जावा में इस फैशन में विस्तारित कक्षाओं के लिए "प्राणियों" के लिए तंत्र नहीं है। कुछ ट्रिक्स हैं जिन्हें कुछ डीबगिंग टूल के साथ खेला जा सकता है, लेकिन वे डीबग परिदृश्य के बाहर उपयोग के लिए नहीं हैं। –

+1

ध्यान दें कि सामान्य रूप से "पुस्तकालय डेवलपर्स" और "एप्लिकेशन डेवलपर्स" (कम से कम जावा दुनिया में) के बीच कोई कठोर सीमा नहीं है। यदि किसी दिए गए सुविधा पुस्तकालयों के लिए उपलब्ध है, तो इसका उपयोग अनुप्रयोगों में भी किया जा सकता है। माना जाता है कि कुछ विशेषताओं की जटिलता पुस्तकालयों में इसका उपयोग करने की अधिक संभावना बनाती है। उदाहरण के लिए: * लेखन * एपीआई जो जटिल परिदृश्यों में जेनेरिक का अच्छा उपयोग करते हैं, बहुत कठिन है, इसलिए आमतौर पर यह केवल (पुन: प्रयोज्य) पुस्तकालयों में किया जाता है। * * ऐसे एपीआई का उपयोग करना बहुत आसान है (यदि एपीआई अच्छी तरह डिज़ाइन किए गए हैं)। –

उत्तर

5

जावा में यह सुविधा नहीं है, और न ही इसे जल्द ही होने की संभावना है।

Groovy हालांकि very similar feature है, और यह भी JVM पर चलता है। शायद यह एक विकल्प है।

+0

धन्यवाद शॉन। मैंने कुछ साल पहले ग्रोवी की कोशिश की (प्री जावा 7), और इसे बहुत धीमा पाया। मैं अपने कोड को कम groovified बनाकर चीजों को गति देने में सक्षम था, लेकिन यह अभी भी 10x धीमी थी। तो मैं बस जावा पर वापस स्विच किया। मुझे जावा 7 के साथ दोबारा कोशिश करनी चाहिए ताकि यह देखने के लिए कि क्या मैं एक ही मुद्दे पर चलता हूं, लेकिन मुझे लगता है कि मैंने पढ़ा है कि ग्रोवी अभी भी जावा से 10x धीमी है, और मैं 10x अधिक हार्डवेयर बर्दाश्त नहीं कर सकता! –

+0

@BobThule: ग्रोवी इन दिनों बहुत तेजी से और दिलचस्प रूप से पर्याप्त हो गया, जावा 7 ने इस में एक बड़ी भूमिका निभाई ('invokedynamic' के माध्यम से)। –

2

मुझे संदेह है कि आप जावा 8 के लिए एक योजनाबद्ध परिवेश के बारे में सोच रहे हैं जो आपको इंटरफ़ेस पर डिफ़ॉल्ट कार्यान्वयन के साथ विधियों को जोड़ने की अनुमति देगा - ताकि आप सभी मौजूदा कोड को तोड़ने के बिना नए तरीके जोड़ सकें। यदि आप इंटरफ़ेस प्रकार को नियंत्रित करते हैं तो यह केवल आपके लिए उपयोग किया जाता है - इसलिए String के लिए इसका उपयोग नहीं किया जाएगा, क्योंकि String एक इंटरफ़ेस नहीं है।

+0

हाय लुइस, सही है, लेकिन सी # के विस्तार के तरीकों एक class-- करने के तरीकों को जोड़ने की अनुमति देते हैं यह सिर्फ वाक्यात्मक चीनी है, लेकिन यह बहुत कोड के लिए, और जल्दी घटनाओं के लिए बनाता है के बाद से कोड पूर्णता आप तरीकों की पेशकश कर सकते हैं। मेरा मानना ​​है कि जेडीके डेवलपर्स ने पहली बार जावा एक्सटेंशन विधियों को सी # से बंद कर दिया था, लेकिन फिर देखा कि पुस्तकालय डेवलपर्स के सामने आने वाले मुद्दों को हल नहीं किया गया था, और इसलिए इसे अब जो कुछ भी हो गया है, उसे खराब कर दिया - जो वास्तव में एक अच्छा समाधान है, लेकिन अपने डेवलपर्स को सुंदर बनाने की कोशिश कर रहे अंत डेवलपर्स के लिए विशेष रूप से उपयोगी नहीं है। –

+0

एएच। मैं Java 8 एक्सटेंशन विधियों पर बोलने वाले जावा लोगों की सीमाओं के पक्ष में व्यक्तिगत रूप से बहुत अधिक हूं - लाइब्रेरी डिज़ाइनर के रूप में बोलते हुए, मुझे अंत में डेवलपर्स को एक प्रकार के मनमाने ढंग से तरीकों को जोड़ने में सक्षम होने के बारे में बहुत मिश्रित भावनाएं हैं। –

+0

मुझे लगता है कि जावा 8 एक्सटेंशन विधियां बहुत अच्छी हैं, और मैं उनकी कार्यक्षमता खोना नहीं चाहूंगा। यह एक वरीयता बात है, और मैं यह कहने की कोशिश नहीं करता कि आप गलत हैं यदि आप उपयोगिता वर्गों में टकराए गए स्थिर तरीकों से बहुत सी कॉल करना चाहते हैं, लेकिन मैं सीधे अपनी वस्तुओं पर कॉलिंग विधियों को प्राथमिकता देता हूं।मुझे लगता है कि यह क्लीनर, अधिक पठनीय है, और अधिक ऑब्जेक्ट उन्मुख दिखता है। और अधिकांश अन्य भाषाओं के साथ मिश्रित/गुण/विस्तार विधियों में सक्षम होने के साथ, मैं जावा के साथ ऐसा करने में सक्षम होना चाहता हूं। स्ट्रिंग के साथ सदस्य विधियों का एक अमीर सेट नहीं है? खासकर जब से यह एक अंतिम वर्ग है? –

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

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