У меня есть функция, которая дает мне состояние обслуживания:
public ServiceState getServiceState(){
return someService().getState(); //currently state return "NOTACTIVE"
}
И когда я вызываю определенный метод в системе, служба должна быть в активном состоянии через x промежуток времени (неизвестное время):
someService().startService(); //after a while, the state of the service should be active
Если бы я хотел проверить состояние сервиса только один раз, я бы сделал это:
public boolean checkCurrentState(String modeToCheck){
return getServiceState() == modeToCheck;
}
checkCurrentState("ACTIVE"); //return true or false depends on the state
Проблема в том, что для изменения состояния требуется некоторое время, поэтому мне нужно следующее:
Мне нужно проверить текущее состояние (в цикле while на x определенное мной количество секунд), если через x секунд служба все еще находится в режиме "NOTACTIVE", я сгенерирую какое-то исключение, чтобы прекратить свою программу .
Итак, я подумал о следующем решении:
Метод с двумя переменными: переменная, представляющая обобщенную функцию, которая может быть вызвана внутри метода, и переменная, время, которое я позволяю ему продолжать проверять: (псевдокод)
public void runGenericForXSeconds(Func function,int seconds) throws SOMEEXCEPTION{
int timeout = currentTime + seconds; //milliseconds
while (currentTime < timeout){
if (function.invoke()) return; //if true exits the method, for the rest of the program, we are all good
}
throw new SOMEEXCEPTION("something failed"); //the function failed
}
Что-то в этом роде, но мне нужно, чтобы это было как можно более универсально (часть вызываемого метода должна принимать другие методы), лямбда-коды Java 8 являются частью решения?