在Java中使用Supplier有什么好处?

hbe*_*iro 12 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());
}
Run Code Online (Sandbox Code Playgroud)

正如我们在该示例中所看到的,该driveVehicle方法需要一个Supplieras参数.为什么我们不把它改成期待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());
}
Run Code Online (Sandbox Code Playgroud)

使用有什么好处Supplier

编辑:关于外行人Java 8供应商和消费者解释的问题的答案没有解释使用的好处Supplier.有评论询问,但没有回答.

这有什么好处而不是直接调用方法?是因为供应商可以像中间人那样行事并交出"回报"价值吗?

Mic*_*mlk 11

在上面的示例中,我不使用供应商.你正在Vehicle开车,而不是要求车辆.

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

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