在Java中使用供应商有什么好处?

时间:2015-11-27 15:53:08

标签: java java-8

阅读新的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 个答案:

答案 0 :(得分:10)

在上面的示例中,我不使用供应商。您正在驾驶Vehicle驾驶,而不是请求车辆。

但是要回答你的一般问题:

  • 因为建造一辆汽车很贵,我们不想这样做,直到我们确实需要这样做。
  • 因为我们想要 X 汽车而不只是一辆。
  • 因为建造汽车的时间很重要。
  • 因为施工很复杂所以我们想把它包起来。
  • 因为在我们归还之前我们不知道要返回哪辆车(也许它会是新车,也许是回收车,也许是包装纸,谁知道)