Java Academy · पाठ

विशिष्ट Instance पर Instance Method References

किसी विशिष्ट object को capture करें और callbacks तथा listeners के लिए उसकी किसी instance method का reference लें।

पाठ 2, कुल 4 में से13 चरण

विशिष्ट Instance पर Instance Method References, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

विशिष्ट इंस्टेंस संदर्भ

विशिष्ट इंस्टेंस पर इंस्टेंस विधि संदर्भ किसी विशेष ऑब्जेक्ट को कैप्चर करता है और उसकी किसी विधि का संदर्भ देता है। वाक्य-विन्यास: instance::methodName।

// System.out is a specific PrintStream instance
List<String> names = List.of("Alice","Bob","Carol");
names.forEach(System.out::println); // System.out is the captured instance

कस्टम ऑब्जेक्ट इंस्टेंस को कैप्चर करना

किसी भी ऑब्जेक्ट को कैप्चर किया जा सकता है। विधि संदर्भ बनाए जाने के समय उस इंस्टेंस का संदर्भ लेता है:

class Greeter {
    private String prefix;
    Greeter(String prefix) { this.prefix = prefix; }
    String greet(String name) { return prefix + ", " + name + "!"; }
}

Greeter g = new Greeter("Hello");
java.util.function.Function<String, String> greetFn = g::greet;

System.out.println(greetFn.apply("Alice")); // Hello, Alice!
System.out.println(greetFn.apply("Bob"));   // Hello, Bob!

Supplier के रूप में उपयोग

किसी विशिष्ट ऑब्जेक्ट से जुड़ी बिना-तर्क वाली इंस्टेंस विधि Supplier<T> से मेल खाती है:

StringBuilder sb = new StringBuilder("Hello World");
java.util.function.Supplier<String> toString = sb::toString;

System.out.println(toString.get()); // Hello World
sb.append(" !");
System.out.println(toString.get()); // Hello World ! (sb is live)

Predicate के रूप में उपयोग

किसी विशिष्ट इंस्टेंस से जुड़ी बूलियन लौटाने वाली इंस्टेंस विधियाँ Predicate से मेल खाती हैं:

String prefix = "Java";
java.util.function.Predicate<String> startsWith = prefix::equals;
// Hmm, this checks if prefix.equals(candidate).
// More useful:
Predicate<String> startsWithJ = s -> s.startsWith("J");

// But a specific instance Predicate:
StringBuilder pattern = new StringBuilder("hello");
Predicate<String> equalsHello = ((CharSequence)"hello")::equals;
System.out.println(equalsHello.test("hello")); // true
System.out.println(equalsHello.test("world")); // false

श्रोता / कॉलबैक पैटर्न

विशिष्ट इंस्टेंस वाले विधि संदर्भ इवेंट श्रोताओं और कॉलबैक के लिए आदर्श होते हैं—वे हैंडलर ऑब्जेक्ट को स्वाभाविक रूप से कैप्चर करते हैं:

class EventHandler {
    void onEvent(String event) {
        System.out.println("Handling: " + event);
    }
}

EventHandler handler = new EventHandler();
List<String> events = List.of("click","hover","submit");
events.forEach(handler::onEvent); // captures the specific handler instance

व्यावहारिक: किसी वर्ग से संबद्ध लॉगर

किसी विशिष्ट लॉगर इंस्टेंस को उपभोक्ता के रूप में उपयोग करने के लिए उससे संबद्ध करें:

import java.util.logging.*;

Logger log = Logger.getLogger("MyApp");

List<String> messages = List.of("Starting","Processing","Done");
messages.stream()
    .map(String::toUpperCase)
    .forEach(log::info); // log is the specific Logger instance

संदर्भ संबद्ध किए जाने के समय स्थिति ग्रहण करता है

संदर्भ के माध्यम से दिखाई देने वाली ऑब्जेक्ट की स्थिति, संदर्भ बनाए जाने के समय की स्नैपशॉट स्थिति नहीं, बल्कि ऑब्जेक्ट की सक्रिय स्थिति होती है:

List<String> list = new ArrayList<>(List.of("A","B"));
java.util.function.Supplier<Integer> sizeRef = list::size;

System.out.println(sizeRef.get()); // 2
list.add("C");
System.out.println(sizeRef.get()); // 3 (reflects live state)

विशिष्ट बनाम मनमाने इंस्टेंस की तुलना

विधि संदर्भ के दो अलग-अलग रूप एक जैसे दिखते हैं — इनके अंतर को समझें:

// Specific instance: s is captured at binding
String s = "hello";
Predicate<String> p1 = s::equalsIgnoreCase; // String::equalsIgnoreCase bound to 'hello'

// Arbitrary instance: receiver is the stream element
Function<String, String> p2 = String::toUpperCase; // receiver IS the element

उपयोग का उदाहरण: थ्रेड-सुरक्षित विधि प्रतिनिधिमंडल

सुरक्षित अतुल्यकालिक उपयोग के लिए किसी सेवा ऑब्जेक्ट की सिंक्रोनाइज़्ड विधि को कार्यात्मक इंटरफ़ेस के रूप में संबद्ध करें:

class Counter {
    private int count = 0;
    synchronized void increment(String ignored) { count++; }
    int get() { return count; }
}

Counter c = new Counter();
List<String> tasks = List.of("t1","t2","t3");
tasks.forEach(c::increment);
System.out.println(c.get()); // 3

जब ग्रहण किया गया इंस्टेंस null हो

यदि विधि संदर्भ बनाए जाने के समय ग्रहण किया गया ऑब्जेक्ट null है, तो NullPointerException संबद्ध करते समय नहीं, बल्कि आह्वान के समय उत्पन्न होता है:

StringBuilder sb = null;
// Reference is created without error:
java.util.function.Supplier<String> ref = sb::toString;
try {
    ref.get(); // NPE thrown here
} catch (NullPointerException e) {
    System.out.println("NPE at invocation");
}

तुलना का सारांश

विधि संदर्भ के तीन रूपों की तुलना:

  • ClassName::staticMethod — स्थैतिक, कोई रिसीवर नहीं
  • instance::instanceMethod — विशिष्ट ऑब्जेक्ट से संबद्ध
  • ClassName::instanceMethod — रिसीवर स्ट्रीम तत्व होता है (मनमाना-इंस्टेंस)

त्वरित जाँच

दिया गया है EventHandler h = new EventHandler(); list.forEach(h::handle); — प्रत्येक तत्व के लिए handle कॉल का रिसीवर क्या है?

पुनरावृत्ति: विशिष्ट इंस्टेंस विधि संदर्भ

मुख्य बातें:

  • वाक्यविन्यास: instance::methodName — किसी विशिष्ट ऑब्जेक्ट को ग्रहण करता है
  • ग्रहण किया गया ऑब्जेक्ट प्रत्येक आह्वान के लिए रिसीवर होता है
  • कॉलबैक, श्रोताओं और लॉग दर्ज करने के पैटर्न के लिए आदर्श
  • ग्रहण किए गए इंस्टेंस की सक्रिय स्थिति संदर्भ के माध्यम से दिखाई देती है
  • यदि इंस्टेंस null हो, तो आह्वान के समय NPE होता है (संबद्ध करते समय नहीं)
शुरुआत निःशुल्क

एआई शिक्षक के साथ Java सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
104
पाठ
374

अक्सर पूछे जाने वाले प्रश्न

क्या “विशिष्ट Instance पर Instance Method References” पाठ निःशुल्क है?

हाँ—“विशिष्ट Instance पर Instance Method References” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“विशिष्ट Instance पर Instance Method References” में मैं क्या सीखूँगा?

किसी विशिष्ट object को capture करें और callbacks तथा listeners के लिए उसकी किसी instance method का reference लें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“विशिष्ट Instance पर Instance Method References” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Static Method References
  2. विशिष्ट Instance पर Instance Method References
  3. Arbitrary-Instance Method References
  4. Constructor References
← Java Academy पर वापस जाएँ