निम्नलिखित कोड में :: का अर्थ क्या है?का अर्थ जावा सिंटैक्स में
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
निम्नलिखित कोड में :: का अर्थ क्या है?का अर्थ जावा सिंटैक्स में
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
यह विधि संदर्भ है। जावा 8 में जोड़ा गया।
TreeSet::new
TreeSet
के डिफ़ॉल्ट कन्स्ट्रक्टर को संदर्भित करता है।
सामान्य A::B
कक्षा में विधि B
को संदर्भित करता है।
::
विधि संदर्भ कहा जाता है। यह मूल रूप से एक विधि का संदर्भ है। यानी यह नाम से मौजूदा विधि को संदर्भित करता है।
Method reference using ::
सुविधा ऑपरेटर है।
विधि संदर्भ Java lambda expressions से संबंधित सुविधाओं में से एक है। –>
का उपयोग कर सामान्य लैम्ब्डा अभिव्यक्ति वाक्यविन्यास प्रारूप का उपयोग करके विधि संदर्भ व्यक्त किया जा सकता है ताकि इसे अधिक सरल बनाने के लिए ::
ऑपरेटर का उपयोग किया जा सके।
उदाहरण:
public class MethodReferenceExample {
void close() {
System.out.println("Close.");
}
public static void main(String[] args) throws Exception {
MethodReferenceExample referenceObj = new MethodReferenceExample();
try (AutoCloseable ac = referenceObj::close) {
}
}
}
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
बुला रहा है/एक 'नए' treeset बनाने।
एक Contstructor संदर्भ का एक समान उदाहरण है:
class Zoo {
private List animalList;
public Zoo(List animalList) {
this.animalList = animalList;
System.out.println("Zoo created.");
}
}
interface ZooFactory {
Zoo getZoo(List animals);
}
public class ConstructorReferenceExample {
public static void main(String[] args) {
//following commented line is lambda expression equivalent
//ZooFactory zooFactory = (List animalList)-> {return new Zoo(animalList);};
ZooFactory zooFactory = Zoo::new;
System.out.println("Ok");
Zoo zoo = zooFactory.getZoo(new ArrayList());
}
}
व्यक्ति :: इस संदर्भ में getName अधिक उदाहरण (Person p) -> p.getName()
के लिए आशुलिपि देखें और JLS section 15.13
+1 में एक विस्तृत व्याख्या है, वे आगे क्या सोच रहे हैं? स्ट्रिंग स्विचिंग शायद ... विधियों के साथ इंटरफेस ... – Bathsheba
@ बाथशेबा, मैं ऑपरेटर ओवरलोडिंग के लिए अपनी उंगलियों को पार कर रहा हूं। – ChiefTwoPencils
@ChiefTwoPencils विशेष रूप से यदि वे 'ऑपरेटर के रूप में' को परिभाषित करते हैं। –