您好我处理一些遗留代码时遇到问题。 我需要一种方法来从parseFile()方法获取更改的文件,直到调用doWithFileList()方法。
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对象是不可变的。 问题是在我的现实世界问题中,parseFile()方法目前仅执行步骤1-3,但我需要添加步骤4。 重命名不是问题,但我需要以某种方式获取调用方法的新文件名。 在现实生活中,这些方法之间的多个对象之间存在更大的堆栈跟踪。
将更改后的文件名称恢复到调用层次结构的开头是什么是最好的方法,我可以在列表中更改对象。 我现在最好的猜测是创建一个ReturnObject,它包含要返回的String和新的File对象。但是我必须在我的路上重构一堆方法,所以我需要创建一堆不同的返回对象。
答案 0 :(得分:-1)
我想到了以下可能性:
就个人而言,我可能会选择(2),但也可能是(3)
答案 1 :(得分:-1)
据我所知,使用ReturnObjet
似乎是唯一的解决方案。