次のコードで、ユーザーにファイルを要求し、(存在する場合) それを 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()
です。)
解決方法の 1 つは、ブール値ではなくファイル オブジェクトを返すことです。しかし、それでは、ファイルが存在しない場合など、そうすべきではない場合でも、curFile が戻り値によって上書きされてしまいます。無効なファイルの場合は null を返し、null が返された場合は古いファイルを一時変数に保存するなど、これにはいくつかの修正がありますが、それは醜いです。
もう 1 つの方法は、オブジェクトにラップされたブール値とファイルの両方を返すことですが、これはさらに醜い方法です。
それで、私は方法1で立ち往生していますか、それともこれを行う良い方法はありますか?