Например -
class Explorer {
private List <File> all_files = new ArrayList <File> ();
File [] explore (...) {
....
} // this function returns, after modification,
// the all_files variable declared above.
// Note :- this function is recursive.
}
Я создаю объект класса Explorer
и вызываю метод explore
, для первого вызова это вообще не вызывает проблем, и я получаю то, что ожидаю.Но если я попытаюсь использовать тот же объект в следующий раз аналогичным образом, вы уже можете ожидать, что произойдет.По сути, метод explore
добавляет некоторые файлы в конце all_files
и возвращает его (в виде массива).При повторном вызове метода добавляются дополнительные файлы без очистки сначала all_files
.
Итак, я ищу стратегию, которая удаляла бы all_files
после одного использования.Я не могу просто добавить выражение вроде clear (all_files) в конце моего метода, потому что оно рекурсивное и all_files
глобальное.Я хочу, чтобы этот процесс очистки был автоматическим, если это возможно.То есть как-то моя программа должна очистить его, когда вся рекурсия будет завершена (как обнаружить?).Предлагайте стратегии.
РЕДАКТИРОВАТЬ: вот весь код (без комментариев) для тех, кому любопытно и скептически относится к моей стратегии -
public class Explorer {
private List <File> all_files = new ArrayList <File> ();
private int current_index = 0;
public int depth_index;
Explorer () { depth_index = Integer.MAX_VALUE; }
Explorer (int index) { depth_index = index; }
public File[] explore (String path) {
if (++current_index > depth_index) {
return all_files.toArray(new File[0]);
}
File f = new File (path);
File[] dir_files = f.listFiles();
for (File file : dir_files) {
if (file.isFile())
all_files.add(file);
else
explore (file.getPath());
}
current_index --;
return all_files.toArray(new File[0]);
}
}