2016-12-27 2 views
1

時間がかかるため、別のスレッドで実行するメソッドを作成しています。しかし、私は、呼び出し元に、操作が完了していることと成功したことを通知したい。これを行うには、何も返さない関数呼び出しが必要です(コールバックの結果は必要ありません)。voidを返し、ブール値のパラメータを渡す機能的インタフェース

例コード:

public boolean send(Command command) { 
    try { 
     //long stuff 
     return true; 
    } catch(Exception ex) { 
     //logging error 
     return false; 
    } 
} 

public void sendAsync(Command command, MyCallback callback) { 
    new Thread(() -> { 
     boolean successful = send(command); 
     if(callback != null) 
      callback.call(successful); 
    }).start(); 
} 

のような何か:

void call(boolean successful); 

はすでにJavaで存在しているか、私は1つを自分で行う必要がありますか?

+0

どのようにあなたはそれがvoidを返す場合、操作が成功した知っているだろうか? –

+0

@JakeMiller機能的なインターフェイスは操作を実行していません。操作が成功し、実際の操作の後に実行された場合にのみレポートされます – Winter

+0

あなたは自分でこれを定義できません。結果が必要ない場合は、なぜパラメータがありますか? –

答えて

4

void call(boolean successful)はとして表すことができ、void accept(Boolean b)はjavaに組み込まれています。これにより、独自の機能インタフェースを作る必要がなくなります。したがって

public void sendAsync(Command command, Consumer<Boolean> callback) { 
    new Thread(() -> { 
     boolean successful = send(command); 
     if(callback != null) 
      callback.accept(successful); 
    }).start(); 
} 
関連する問題