2015-11-27 10 views
9

नए Supplier इंटरफ़ेस के बारे में पढ़ना मुझे इसके उपयोग का कोई फायदा नहीं दिखाई दे रहा है। हम इसका एक उदाहरण देख सकते हैं।जावा में प्रदायक का उपयोग करने का क्या फायदा है?

class Vehicle{ 
    public void drive(){ 
    System.out.println("Driving vehicle ..."); 
    } 
} 
class Car extends Vehicle{ 
    @Override 
    public void drive(){ 
    System.out.println("Driving car..."); 
    } 
} 
public class SupplierDemo { 
    static void driveVehicle(Supplier<? extends Vehicle> supplier){ 
    Vehicle vehicle = supplier.get(); 
    vehicle.drive(); 
    } 
} 
public static void main(String[] args) { 
    //Using Lambda expression 
    driveVehicle(()-> new Vehicle()); 
    driveVehicle(()-> new Car()); 
} 

हम चाहते हैं कि उदाहरण में देख सकते हैं, driveVehicle विधि एक Supplier तर्क के रूप में की उम्मीद है। हम इसे Vehicle की अपेक्षा करने के लिए क्यों नहीं बदलते हैं?

public class SupplierDemo { 
    static void driveVehicle(Vehicle vehicle){ 
    vehicle.drive(); 
    } 
} 
public static void main(String[] args) { 
    //Using Lambda expression 
    driveVehicle(new Vehicle()); 
    driveVehicle(new Car()); 
} 

Supplier का उपयोग करने का क्या फायदा है?

संपादित करें: सवाल Java 8 Supplier & Consumer explanation for the layperson पर जवाब Supplier उपयोग कर के लाभ की व्याख्या नहीं करता। इसके बारे में पूछने पर एक टिप्पणी है, लेकिन इसका उत्तर नहीं दिया गया था।

विधि को सीधे कॉल करने के बजाय इसका क्या फायदा है? क्या ऐसा इसलिए है क्योंकि प्रदायक एक मध्यस्थ की तरह कार्य कर सकता है और को "वापसी" मान बंद कर सकता है?

+1

FWIW (शायद यह एक नया एक, शायद एक पुनर्नवीनीकरण एक, शायद एक आवरण, कौन जानता है हो जाएगा): 'driveVehicle (वाहन: : नया) ' – zeroflagL

+0

क्या कोई प्रश्न के आखिरी हिस्से पर टिप्पणी कर सकता है - 'विधि को सीधे कॉल करने के बजाए इसका क्या फायदा है?'? – pMan

+0

@pman प्रदायक उपयोगी है क्योंकि इसे केवल तभी लागू किया जाएगा जब आवश्यक हो। उदाहरण के लिए, यदि (हालत) {doStuff (supplier.get()); } – hbelmiro

उत्तर

9

ऊपर दिए गए आपके उदाहरण में मैं आपूर्तिकर्ता का उपयोग नहीं करता। वाहनों का अनुरोध नहीं करते, आप ड्राइव करने के लिए Vehicle ले रहे हैं।

हालांकि अपने सामान्य सवाल का जवाब देने:

  • क्योंकि एक कार का निर्माण महंगा है और हम जब तक हम वास्तव में वास्तव में करने की जरूरत है यह करने के लिए नहीं करना चाहती।
  • क्योंकि हम एक्स कारों को सिर्फ एक नहीं चाहते हैं।
  • क्योंकि कार के लिए निर्माण का समय महत्वपूर्ण है।
  • क्योंकि निर्माण जटिल है इसलिए हम इसे लपेटना चाहते हैं।
  • क्योंकि हम जो वाहन जब तक हम इसे वापस लौटने के लिए पता नहीं है
+0

यह इस संदर्भ में कोई समझ नहीं आता है। –

+1

@mlk मैं एक सामान्य तरीके से पूछ रहा था। आपका उत्तर मान्य है। धन्यवाद। – hbelmiro

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