Задание определяется следующим образом:
class Job<T> {
String Class<T> type;
T execute() throws Exception {
return type.newInstance();
}
static <T> T execute(Job<T> aJob, Job<T>... jobs) {
//... some lines of unrelated code...
try{
return aJob.execute();
} catch(Exception e){
if(jobs.length == 0) throw new RuntimeException(e);
return execute(jobs[0], Arrays.copyOfRange(jobs, 1, jobs.length));
}
}
}
Рекурсия необходима для повторного использования блока try-catch.Если одна работа не удается, я вызываю следующую работу.Когда ни одно из заданий не является успешным, я выбрасываю RuntimeException, оборачивая фактическое исключение.Это всего лишь запасной механизм.Код не такой же, как у меня, но он имеет ту же структуру.
Меня беспокоит рекурсивный вызов для выполнения:
execute(jobs[0], Arrays.copyOfRange(jobs, 1, jobs.length));
Я мог бы также использоватьОчередь вместо массива:
T execute(Job<T> aJob, Queue<Job<T>> jobQueue) {
//...
execute(jobQueue.poll(), jobQueue);
//...
Я думал, что использование массива даст лучшую производительность.Но использование очереди делает код более читабельным и интуитивно понятным.Я не проверял производительность ни одного варианта, хотя.
- Какая структура данных даст лучшую производительность?
- Есть ли лучший способ сделать этот рекурсивный вызов?
- Было бы лучше использовать дляцикл вместо рекурсии?
Спасибо