Constructor References
Supplier और Function जैसे functional interfaces के माध्यम से instances बनाने के लिए ClassName::new का उपयोग करें।
Constructor References, CoddyKit पर Java Academy का एक निःशुल्क पाठ है। यह 4 में से 4वाँ पाठ है। आप नीचे पूरा पाठ निःशुल्क पढ़ सकते हैं—फिर अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर के साथ ब्राउज़र में इसका व्यावहारिक अभ्यास कर सकते हैं। यह Java Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
निर्माता संदर्भ क्या होते हैं?
निर्माता संदर्भ किसी कार्यात्मक इंटरफ़ेस के माध्यम से ऑब्जेक्ट बनाने के लिए ClassName::new का उपयोग करता है। कार्यात्मक इंटरफ़ेस के पैरामीटर निर्माता के पैरामीटर से मेल खाते हैं।
import java.util.function.*;
class Person {
String name;
Person(String name) { this.name = name; }
public String toString() { return "Person(" + name + ")"; }
}
// Function<String, Person> — calls Person(String)
Function<String, Person> factory = Person::new;
Person p = factory.apply("Alice");
System.out.println(p); // Person(Alice)Supplier के रूप में बिना आर्ग्युमेंट वाला निर्माता
बिना आर्ग्युमेंट वाला निर्माता Supplier<T> से मेल खाता है:
class Counter {
int count = 0;
void inc() { count++; }
}
Supplier<Counter> newCounter = Counter::new;
Counter c1 = newCounter.get();
Counter c2 = newCounter.get(); // independent instances
c1.inc();
System.out.println(c1.count); // 1
System.out.println(c2.count); // 0BiFunction के रूप में दो-आर्ग्युमेंट वाला निर्माता
दो पैरामीटर वाले निर्माता BiFunction<T,U,R> से मेल खाते हैं:
record Point(int x, int y) {}
BiFunction<Integer, Integer, Point> makePoint = Point::new;
Point p = makePoint.apply(3, 4);
System.out.println(p); // Point[x=3, y=4]Stream.map में निर्माता संदर्भ
निर्माता संदर्भ का उपयोग करके स्ट्रिंग को ऑब्जेक्ट में बदलें:
import java.util.*;
import java.util.stream.*;
List<String> names = List.of("Alice","Bob","Carol");
List<Person> people = names.stream()
.map(Person::new) // calls new Person(name) for each
.collect(Collectors.toList());
people.forEach(System.out::println);
// Person(Alice)
// Person(Bob)
// Person(Carol)ऐरे निर्माता संदर्भ
Type[]::new के साथ ऐरे गतिशील रूप से बनाएँ। इसका उपयोग Stream.toArray() करता है:
import java.util.stream.*;
String[] arr = Stream.of("a","b","c")
.toArray(String[]::new);
for (String s : arr) System.out.print(s + " ");
// a b c
int[] sizes = {3, 5, 2};
String[][] matrix = Arrays.stream(sizes)
.mapToObj(String[]::new)
.toArray(String[][]::new);Factory इंटरफ़ेस पैटर्न
फ़ैक्टरी के लिए कस्टम कार्यात्मक इंटरफ़ेस परिभाषित करें, फिर निर्माता संदर्भों का उपयोग करें:
@FunctionalInterface
interface Factory<T> {
T create(String config);
}
class DBConnection {
String url;
DBConnection(String url) { this.url = url; }
public String toString() { return "DB(" + url + ")"; }
}
Factory<DBConnection> dbFactory = DBConnection::new;
DBConnection conn = dbFactory.create("jdbc:postgresql://localhost/mydb");
System.out.println(conn);निर्माता संदर्भों के साथ निर्भरता इंजेक्शन
फ़्रेमवर्क अक्सर आलसी इंस्टैंशिएशन के लिए कार्यात्मक फ़ैक्टरी का उपयोग करते हैं। निर्माता संदर्भ इस पैटर्न को साफ़-सुथरा बनाते हैं:
import java.util.function.*;
class ServiceLocator {
private final Map<String, Supplier<?>> registry = new HashMap<>();
<T> void register(String name, Supplier<T> factory) {
registry.put(name, factory);
}
@SuppressWarnings("unchecked")
<T> T get(String name) { return (T) registry.get(name).get(); }
}
ServiceLocator loc = new ServiceLocator();
loc.register("counter", Counter::new);
Counter c = loc.get("counter");लैम्ब्डा और निर्माता संदर्भ में से चुनाव
जब लैम्ब्डा का बॉडी केवल new Type(args) हो, तब निर्माता संदर्भ का उपयोग करें:
// Lambda:
Function<String, Person> f1 = name -> new Person(name);
// Constructor reference (preferred):
Function<String, Person> f2 = Person::new;
// When you need extra logic, stick with lambda:
Function<String, Person> f3 = name -> new Person(name.trim().toLowerCase());जेनेरिक प्रकार और निर्माता संदर्भ
जेनेरिक वर्ग भी काम करते हैं — प्रकार का अनुमान कार्यात्मक इंटरफ़ेस के संदर्भ से लगाया जाता है:
import java.util.*;
import java.util.function.*;
// ArrayList::new matches Supplier<ArrayList<String>>
Supplier<List<String>> listFactory = ArrayList::new;
List<String> l1 = listFactory.get();
List<String> l2 = listFactory.get(); // independent lists
l1.add("hello");
System.out.println(l2.size()); // 0निर्माता संदर्भों का उपयोग करने वाले स्ट्रीम कलेक्टर
कस्टम परिणाम कंटेनर बनाने के लिए कलेक्टर में निर्माता संदर्भों का उपयोग करें:
import java.util.stream.*;
// Collect into a LinkedList using a constructor reference supplier
LinkedList<String> linked = Stream.of("a","b","c")
.collect(Collectors.toCollection(LinkedList::new));
System.out.println(linked.getFirst()); // aप्रिमिटिव और ऑटोबॉक्सिंग
रैपर प्रकारों के निर्माता संदर्भ ऑटोबॉक्सिंग संभालते हैं:
// Integer::new is deprecated in Java 9+, but illustrates the concept
// Use Integer.valueOf or just autoboxing in modern Java
Function<String, Integer> intParser = Integer::parseInt; // static method ref
System.out.println(intParser.apply("42")); // 42त्वरित जाँच
ArrayList::new जैसे बिना आर्ग्युमेंट वाले निर्माता संदर्भ का मिलान किस कार्यात्मक इंटरफ़ेस से होता है?
पुनरावृत्ति: निर्माता संदर्भ
मुख्य बातें:
- वाक्यविन्यास: ClassName::new — मेल खाते निर्माता को सौंपता है
- बिना आर्ग्युमेंट वाला → Supplier<T>; एक आर्ग्युमेंट वाला → Function<T,R>; दो आर्ग्युमेंट वाला → BiFunction
- ऐरे निर्माता: Type[]::new — Stream.toArray() के साथ उपयोग किया जाता है
- जब लैम्ब्डा का बॉडी केवल 'new Type(args)' हो, तब यह लैम्ब्डा से अधिक साफ़ होता है
- टाइप किए गए कलेक्शन परिणामों के लिए Collectors.toCollection(LinkedList::new) का उपयोग करें
एआई शिक्षक के साथ Java सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 104
- पाठ
- 374
अक्सर पूछे जाने वाले प्रश्न
क्या “Constructor References” पाठ निःशुल्क है?
हाँ—“Constructor References” का पूरा पाठ यहाँ वेब पर निःशुल्क पढ़ा जा सकता है। इंटरैक्टिव अभ्यास (अंतर्निहित कोड संपादक और 24/7 एआई ट्यूटर) करने और Java Academy पाठ्यक्रम का बाकी हिस्सा अनलॉक करने के लिए CoddyKit PRO लें। Java Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Constructor References” में मैं क्या सीखूँगा?
Supplier और Function जैसे functional interfaces के माध्यम से instances बनाने के लिए ClassName::new का उपयोग करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ Java Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या Java Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर Java Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 4वाँ पाठ है।
“Constructor References” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस Java Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर Java Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- Static Method References
- विशिष्ट Instance पर Instance Method References
- Arbitrary-Instance Method References
- Constructor References