2015-11-27 12 views
9

Lettura sulla nuova interfaccia Supplier Non riesco a vedere alcun vantaggio del suo utilizzo. Possiamo vedere qui sotto un esempio.Qual è il vantaggio dell'utilizzo del Fornitore in Java?

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

Come si può vedere in questo esempio, il metodo driveVehicle aspetta una Supplier come argomento. Perché non lo cambiamo semplicemente per aspettarci un 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()); 
} 

Qual è il vantaggio di utilizzare Supplier?

EDIT: Le risposte sulla questione Java 8 Supplier & Consumer explanation for the layperson non spiega i vantaggi di utilizzare Supplier. C'è un commento che chiede, ma non è stata data risposta.

Qual è il vantaggio di questo anziché chiamare direttamente il metodo? È perché il Fornitore può agire come un intermediario e consegnare che il valore "restituisce"?

+1

FWIW: 'driveVehicle (Veicolo: : new) ' – zeroflagL

+0

Qualcuno può commentare l'ultima parte della domanda: 'Qual è il vantaggio di questo piuttosto che chiamare direttamente il metodo?'? – pMan

+0

@pMan Il fornitore è utile perché verrà richiamato solo quando e se necessario. Ad esempio, if (condition) {doStuff (supplier.get()); } – hbelmiro

risposta

9

Nel tuo esempio sopra non utilizzerei un fornitore. Stai prendendo un Vehicle per guidare, non richiedendo veicoli.

Tuttavia per rispondere alla tua domanda di carattere generale:

  • Perché la costruzione di una macchina è costoso e non vogliamo farlo fino a quando abbiamo davvero bisogno.
  • Perché vogliamo le automobili X non solo una.
  • Perché il tempo di costruzione per un'auto è importante.
  • Perché la costruzione è complicata, quindi vogliamo concludere.
  • Perché noi non sappiamo quale veicolo per tornare fino al nostro ritorno è (forse sarà uno nuovo, magari un riciclato uno, forse un involucro, chi lo sa)
+0

questo non ha senso in questo contesto. –

+1

@mlk mi stavo chiedendo in un modo generale. La tua risposta è valida Grazie. – hbelmiro

Problemi correlati