私はAPIを(Javaで)設計しており、ユーザーがMatlabからAPIにアクセスすることを期待しています。 (、いくつかのメカニズムを介して、例えばポーリングを)Java Obj
のインスタンスのホールドを取得します(バックグラウンドで)Matlab/Java APIコールバック
javaApi.waitUntilPredicateIsTrue(Predicate<JavaObj> test);
マイAPI:問題は、私はAPIのような機能の一部を提供したいということです。これらのインスタンスの1つがPredicate
に渡されると、true
と評価されるまでこのAPIメソッドをブロックします。 JavaからこのAPIを呼び出す場合は、次のようにします。
javaApi.waitUntilPredicateIsTrue(new Predicate<JavaObj>() {
public boolean evaluate(JavaObj jo) {
return "READY".equals(jo.getState());
}
});
これはどのようにしてMatlabから呼び出すことができますか? Matlabの匿名クラスを使用できますか? Predicate
のインタフェースを拡張したMatlab classdef
を宣言できますか(これはJavaの汎用バージョンに対応できますか)。
残念ながらそうではありません。私は、私のAPIを最も一般的なユースケースやMatlabで使いやすくするよう努めています。基本的にAPIは、(Java)オブジェクトにアクセスするために使用されます。ただし、オブジェクトはユーザーの視点からは「準備ができていない」可能性があります。ポーリングロジック自体を実装するのではなく、単純なwaitUntilXIsReadyメカニズムを提供することを望んでいました。あなたの提案の問題は、APIに "isMyConditionMet"がないことです。彼がそれに満足しているかどうかを決定する必要があるのはMatlabのエンドユーザです –
"ポーリングロジック"は "!conditionIsMet"を回転させるより複雑です。それ)。これは、新しいバージョンのオブジェクトがあなたのために準備できているからです(マルチキャストグループに公開されたイベントを介してプッシュアウトされているため)。 Matlabのユーザーが生のマルチキャストを使いこなすのは本当に嫌です! –