जावा 8 में :: ऑपरेटर (डबल कोलन): उदाहरणों के साथ पूर्ण गाइड

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

जावा 8 में :: ऑपरेटर (Double Colon): शुरुआत से विशेषज्ञ तक

\n\n

क्या आपने कभी जावा 8 में कोड लिखा है और System.out::println या String::length जैसी अजीब संरचना देखी है? यह जादू जैसा लगता है, है ना? वास्तव में, यह जादू नहीं है, बल्कि आधुनिक जावा के सबसे सुंदर टूल में से एक है — डबल कोलन ऑपरेटर (जिसे double colon operator या मेथड रेफरेंस भी कहा जाता है)।

\n\n

इस लेख में, हम :: ऑपरेटर को बुनियादी से लेकर उन्नत तकनीकों तक समझेंगे। आप अधिक स्वच्छ, संक्षिप्त और पढ़ने योग्य कोड लिखना सीखेंगे। चलिए शुरू करते हैं!

\n\n

:: ऑपरेटर क्या है और इसकी आवश्यकता क्यों है?

\n\n

:: ऑपरेटर (double colon) जावा 8 में लैम्ब्डा एक्सप्रेशन के लिए सिंटैक्टिक शुगर के रूप में पेश किया गया था। यदि कोई लैम्ब्डा एक्सप्रेशन केवल किसी मौजूदा मेथड को कॉल करता है, तो आप इसे मेथड रेफरेंस से बदल सकते हैं। यह कोड को छोटा और अधिक अभिव्यंजक बनाता है।

\n\n

खुद तुलना करें:

\n\n
// लैम्ब्डा एक्सप्रेशन\nlist.forEach(s -> System.out.println(s));\n\n// मेथड रेफरेंस (:: ऑपरेटर)\nlist.forEach(System.out::println);
\n\n

दूसरा विकल्प न केवल छोटा है, बल्कि तुरंत बताता है: "प्रत्येक एलिमेंट के लिए, System.out पर println मेथड कॉल करें"। सुंदरता!

\n\n

मेथड रेफरेंस के चार प्रकार

\n\n

जावा 8 में method reference के चार मुख्य प्रकार हैं। आइए प्रत्येक को उदाहरणों के साथ समझते हैं।

\n\n

1. स्टैटिक मेथड का रेफरेंस

\n\n

सिंटैक्स: ClassName::staticMethodName

\n\n

उदाहरण: सूची में सम संख्याओं की गिनती करना।

\n\n
import java.util.Arrays;\nimport java.util.List;\n\npublic class StaticMethodReference {\n    public static boolean isEven(Integer number) {\n        return number % 2 == 0;\n    }\n\n    public static void main(String[] args) {\n        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);\n        \n        // लैम्ब्डा\n        long countLambda = numbers.stream()\n                .filter(n -> StaticMethodReference.isEven(n))\n                .count();\n        \n        // स्टैटिक मेथड का रेफरेंस\n        long countRef = numbers.stream()\n                .filter(StaticMethodReference::isEven)\n                .count();\n        \n        System.out.println("सम संख्याएँ: " + countRef); // 3\n    }\n}
\n\n

ध्यान दें: हम isEven मेथड को कॉल नहीं कर रहे हैं — हम केवल इसका रेफरेंस पास कर रहे हैं। जावा स्वचालित रूप से सूची के प्रत्येक एलिमेंट को आर्गुमेंट के रूप में रखेगा।

\n\n

2. किसी विशिष्ट ऑब्जेक्ट के इंस्टेंस मेथड का रेफरेंस

\n\n

सिंटैक्स: objectReference::instanceMethodName

\n\n

इस प्रकार का उपयोग तब किया जाता है जब आपके पास पहले से कोई विशिष्ट ऑब्जेक्ट हो और आप उसका मेथड कॉल करना चाहते हों।

\n\n
import java.util.Arrays;\nimport java.util.List;\n\npublic class InstanceMethodReference {\n    public static void main(String[] args) {\n        List<String> names = Arrays.asList("अन्ना", "बोरिस", "विक्टर");\n        \n        // StringBuilder ऑब्जेक्ट बनाएँ\n        StringBuilder sb = new StringBuilder("नाम: ");\n        \n        // लैम्ब्डा\n        names.forEach(name -> sb.append(name).append(" "));\n        \n        // इंस्टेंस मेथड का रेफरेंस\n        // (लेकिन append StringBuilder लौटाता है, इसलिए लैम्ब्डा का उपयोग करें)\n        // जबकि System.out.println के लिए - यह आदर्श है:\n        names.forEach(System.out::println);\n        \n        System.out.println(sb.toString()); // नाम: अन्ना बोरिस विक्टर\n    }\n}
\n\n

क्लासिक उदाहरण — System.out::println। System.out एक विशिष्ट PrintStream ऑब्जेक्ट है, और println इसका मेथड है।

\n\n

3. किसी निश्चित प्रकार के किसी भी ऑब्जेक्ट के इंस्टेंस मेथड का रेफरेंस

\n\n

सिंटैक्स: ClassName::instanceMethodName

\n\n

इस प्रकार को अक्सर पिछले वाले से भ्रमित किया जाता है। यहाँ हम कोई विशिष्ट ऑब्जेक्ट निर्दिष्ट नहीं करते हैं — इसके बजाय हम कहते हैं: "इस क्लास का कोई भी ऑब्जेक्ट लो और उस पर मेथड कॉल करो"।

\n\n


                
                

ब्लॉग

पुस्तक अनुशंसाएँ