2014-11-19 7 views

उत्तर

19

यह विधि संदर्भ है। जावा 8 में जोड़ा गया।

TreeSet::newTreeSet के डिफ़ॉल्ट कन्स्ट्रक्टर को संदर्भित करता है।

सामान्य A::B कक्षा में विधि B को संदर्भित करता है।

+2

+1 में एक विस्तृत व्याख्या है, वे आगे क्या सोच रहे हैं? स्ट्रिंग स्विचिंग शायद ... विधियों के साथ इंटरफेस ... – Bathsheba

+2

@ बाथशेबा, मैं ऑपरेटर ओवरलोडिंग के लिए अपनी उंगलियों को पार कर रहा हूं। – ChiefTwoPencils

+2

@ChiefTwoPencils विशेष रूप से यदि वे 'ऑपरेटर के रूप में' को परिभाषित करते हैं। –

8

:: विधि संदर्भ कहा जाता है। यह मूल रूप से एक विधि का संदर्भ है। यानी यह नाम से मौजूदा विधि को संदर्भित करता है।

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()); 
    } 
} 
4

व्यक्ति :: इस संदर्भ में getName अधिक उदाहरण (Person p) -> p.getName()

के लिए आशुलिपि देखें और JLS section 15.13

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