2015-11-27 4 views
9

Чтение о новом интерфейсе Supplier Я не вижу никакого преимущества от его использования. Мы можем видеть ниже пример.В чем преимущество использования Поставщика на 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()); 
} 

Как мы можем видеть в этом примере, метод 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?

EDIT: Ответы на вопрос Java 8 Supplier & Consumer explanation for the layperson не объясняет преимущества использования Supplier. Есть комментарий, спрашивающий об этом, но на него не ответил.

В чем преимущество этого, а не вызов метода напрямую? Это потому, что Поставщик может действовать как посредник и передавать , что означает «возврат»?

+1

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

+0

Может кто-нибудь прокомментировать последнюю часть вопроса -« В чем преимущество этого, а не вызов метода напрямую? »? – pMan

+0

Поставщик @pMan полезен, поскольку он будет вызываться только тогда, когда и при необходимости. Например, если (условие) {doStuff (поставщик.get()); } – hbelmiro

ответ

9

В вашем примере выше я не использовал поставщика. Вы принимаете Vehicle для езды, не запрашивая транспортные средства.

Однако, чтобы ответить на ваш общий вопрос:

  • Поскольку строительство автомобиль стоит дорого, и мы не хотим, чтобы это сделать, пока мы действительно на самом деле не нужно.
  • Потому что мы хотим X Автомобили не только один.
  • Потому что время постройки автомобиля важно.
  • Потому что конструкция сложная, поэтому мы хотим ее обернуть.
  • Потому что мы не знаем, какой автомобиль, чтобы вернуться, пока мы не возвратите его (возможно, это будет новый один, может быть переработаны один, может быть, обертка, кто знает)
+0

В этом контексте это не имеет никакого смысла. –

+1

@mlk Я спрашивал в общем. Ваш ответ действителен. Спасибо. – hbelmiro

Смежные вопросы