クラスには、同期的に実行されるいくつかのメソッドがあります。最初のアイデアは、それをラップし、switch enum を使用してどの関数を呼び出すかを決定することでした。しかし、呼び出されるメソッドごとに、ラッパー クラスに新しいメソッドと新しい列挙型が必要でした。次のようになります。
public class QueuedShow implements InterfaceShowAlert, Runnable {
private Class Action {
String param1;
public static enum ActionEnum{
NEW, CHECK, UPDATE, DELETE, DISPLAY;
}
public ActionEnum todo;
public Action(ActionEnum todo, Object param){
this.todo=todo;
this.param1=param;
}
}
private BlockingQueue<Action> actionList;
public void run(){
while(true){
Action action=actionList.take(); //THIS waits until queue isn't empty
switch(action.todo){
case NEW: //Call original function
....
}
}
}
public void new(String param){
actionList.add(new Action(NEW, param));
}
}
その後、リフレクションについて学び、新しいアイデアを思いつきました。つまり、メソッドを直接呼び出すのではなく、文字列を使用してメソッドを呼び出します。ラッパー クラスは文字列を読み取って解析し、リフレクションを使用してクラスとそれを含むメソッドを取得します。パラメータと Method オブジェクトをクラスに入れ、それをキューに入れます。クラスは、列挙型を使用して切り替える代わりに、Method.invoke(params) を使用するようになりました。しかし、これの問題は、コンパイラ時の型チェックが失われることです。
もちろん、これはすべて void のメソッドに対してのみ機能しますが、もちろん Future クラスを使用して値を返すこともできます。
現在、同期呼び出しを非同期呼び出しに切り替えることを既に実装しているフレームワークはありますか、またはこれを行う他の方法を知っていますか。