こんにちは名前を変更した後、私はいくつかのレガシーコードを扱う問題を抱えています。 は私が呼び出しdoWithFileList()メソッドまで構文解析ファイル()メソッドから変更されたファイルを取得する方法が必要です。Javaの更新ファイルの参照が
public static void main(String[] args) throws IOException {
File file1 = File.createTempFile("file1", ".tmp");
File file2 = File.createTempFile("file2", ".tmp");
ArrayList<File> fileList = new ArrayList<File>();
fileList.add(file1);
fileList.add(file2);
doWithFileList(fileList);
}
static void doWithFileList(List<File> fileList) {
for (File file : fileList) {
String result = parseFile(file);
}
//Do something with the (now incorrect) file objects
for (File file : fileList) {
// always false here
if (!file.exists()) {
System.out.println("File does not exist anymore");
}
}
}
private static String parseFile(File file) {
//1. Get information from the File
//2. Use this information to load an object from the Database
//3. return some property of this object
//4. depending on another property of the DB object rename the file
file.renameTo(new File(file.getAbsoluteFile() + ".renamed"));
return "valueParsedFromFile";
}
私はFileオブジェクトが不変であることを知っています。 問題が私の現実世界の問題であり、現時点で構文解析ファイル()メソッドは、ステップステップ1-3を行いますが、私はステップ4 に名前変更を追加する必要が問題ではありませんが、私は何とか新しいファイル名を取得する必要があります呼び出しメソッドに渡します。これらの方法の間の複数のオブジェクト間で大きなスタックトレースがある現実の問題で 。
ファイルの変更された名前を、リスト内のオブジェクトを変更できるコール階層の先頭に戻すには、どのような方法が最適でしょうか。 現時点では私の最高の推測では、返される文字列と新しいFileオブジェクトの両方を保持しているReturnObjectを作成することです。しかし、その後私は途中でたくさんのメソッドをリファクタリングしなければならないので、たくさんの異なるリターンオブジェクトを作成する必要があります。
3は、唯一の有効な解決策です。 1と2はプロフェッショナルなプログラムでは避けるべき悪いことです!それは信頼性が低く、維持するのが難しく、sloooowwです。より大きなスタックで実行される作業は、すべてのケースで同じです。この答えを理解できません... –