我希望以下代码向用户询问文件并(如果存在)将其存储在 curFile 中。这应该不是问题,因为 curFile 是通过引用传递的。如果该过程成功,则应返回 true,否则应返回 false。
void foo() {
File curFile = null;
// Open a file and set curFile to this file
openFile(curFile);
}
bool openFile(File file) {
// Ask the user for the file to open
File tempFile = getFileFromUserInput()
// If the file exists, set file and (thus curFile) to tempFile and return true
if (tempFile.exists()) {
file = tempFile;
return true;
} else {
return false;
}
}
问题是代码没有设置curFile = tempFile
。我认为这样做的原因是,虽然 curFile 是一个对象并且是通过引用传递的,但我并没有在函数中修改这个对象。我将一个新对象放入变量中。但我仍然不确定这是否是它不起作用的原因。(getFileFromUserInput()
实际上是一种 Swing 方法FileChooser.getSelectedFile()
,以防万一。)
一种解决方法是返回文件对象而不是布尔值。但这会导致 curFile 被返回值覆盖,即使它不应该被覆盖,例如当文件不存在时。对此有一些修复,例如如果它是无效文件则返回 null 并将旧文件保存在临时变量中以防返回 null ,但这很难看。
另一种方法是返回包装在一个对象中的布尔值和文件,但这更难看。
所以我坚持方法一,还是有一个很好的方法来做到这一点?