2015-11-27 21 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を使用する利点は何ですか?

編集:質問Java 8 Supplier & Consumer explanation for the laypersonの回答では、Supplierを使用する利点については説明していません。 コメントはありますが、回答はありませんでした。

このメソッドを直接呼び出すのではなく、どのような利点がありますか? サプライヤが仲介者のように行動し、 "返品"という値を に渡すことができるからですか?

+1

FWIW: 'driveVehicle(ビークル: :new) ' – zeroflagL

+0

誰かが質問の最後の部分にコメントすることができますか? 'メソッドを直接呼び出すのではなく、これのメリットは何ですか?' – pMan

+0

@pMan Supplierは、必要なときにのみ呼び出されるため、便利です。たとえば、if(condition){doStuff(supplier.get()); } – hbelmiro

答えて

9

上記の例では、私はサプライヤを使用しませんでした。あなたは車両を要求しないで、Vehicleを運転しています。

は、しかし、あなたの一般的な質問にお答えします

  • 車を構築することは高価であり、私たちは本当にする必要がするまで、我々はそれを行うにはしたくないので。
  • 私たちがほしいと思うのでX車はただ一つではありません。
  • 車の工事の時間が重要なので、
  • 工事が複雑なので包み込みたいので。
  • 我々はそれを返すまで、私たちは車を返すためにどの知っているわけではないので(多分それは多分新しいもの、多分リサイクル1、ラッパー、知っているだろう)
+0

これはこの文脈では意味をなさない。 –

+1

@mlk私は一般的な方法で尋ねていた。あなたの答えは有効です。ありがとうございました。 – hbelmiro

関連する問題