В классах есть несколько методов, которые выполняются синхронно. Я хотел бы, чтобы они работали асинхронно, первая идея состояла в том, чтобы обернуть это и использовать switch enum, чтобы решить, какая функция должна быть вызвана. Но для каждого вызванного метода мне требовался новый метод в классе-обертке и новый 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) вместо использования enum для переключения. Но проблема в том, что проверка типов во время компиляции потеряна.
Конечно, все это работает только для пустых методов, но, конечно, мы можем использовать класс Future и для возврата значений.
Теперь существует ли какая-либо инфраструктура, которая уже реализовала преобразование синхронных вызовов в асинхронные, или вам известен какой-либо другой метод, который делает это.