申し訳ありませんが、私は思っています。関数をjavaでパラメータとして渡して複数回実行する方法
私の目標は、パラメータとして渡しているメソッドを実行しようとすると「n」時間のループを繰り返すリトライ関数を作成することです。
この場合、関数 "myFunction()"を実行したいと思いますが、返される値がfalseで、戻り値がtrueになるまで実行したいことがあります。私はそれを実行したい方法です
:
public static void main (String [] args){
boolean did work = retry (myFunction(),5)
if(didwork){
System.out.println("I found my stuff");
} else {
System.out.println("I didn't found my stuff");
}
}
public boolean retry (Function function, int loopTry){
boolean success = false;
for(int i=0 ; i<loopTry ; i++){
success = function.run();
if(success){
break;
}
}
return success;
}
public boolean myFunction(){
boolean found = false;
//do stuff
if(stuff){
found = true;
}
return found;
}
が、私はそれは不可能だということを知っている(少なくともJavaの7多分8中に)
は、私が作成することを示唆しているいくつかの答えを見てきました特定の関数などのオブジェクト...しかし、再試行したいメソッドでないオブジェクトをリメイクする必要があるので、リトライ関数は一般的になりません。
私はそれを行うための「クリーンな」方法(Java 8でも)があるかどうかを知りたいですか?
あなたは
をMyFunctionのとのインタフェースを作成します。次に、あなたが望むもので1つのクラスを実装します。関数を呼び出すには、このクラスのインスタンスを 'retry'に渡す必要があります。 – AxelH
あなたの関数のようなものは入力がなく、出力を持っています。 Java 8の 'Supplier'インタフェースを見てください。https://docs.oracle.com/javase/8/docs/api/java/util/function/Supplier.html – dty
' retry'は 'Function'オブジェクトのパラメータを受け取ります'ブール値ではありません。 'このコードはコンパイルされますか? –