if (openFile == null) {
new AppFileDialog().chooseFile("Save", appFrame);
}
if (openFile == null) {
return;
}
在这里,我需要检查用户是否已经选择了一个文件。如果没有,他们会得到提示。如果文件仍为null,则函数将返回而不保存。问题是两个相同的if语句,我可以避免吗?我非常认真地对待DRY,但同时KISS。理想情况下,这两者是相辅相成的,但在这种情况下,似乎它们是相互排斥的。
答案 0 :(得分:2)
不完全,虽然我认为不同的结构会使问题更加明显:
// If no file, give the user a chance to open one
if (openFile == null) {
new AppFileDialog().chooseFile("Save", appFrame);
// still no file, user must not want to do this
if (openFile == null) {
return;
}
}
答案 1 :(得分:1)
把它放在一个循环中?用户选择的文件不应该为空
但是你已经删除了太多的代码给出了具体的答案。我所看到的只是两张相同的支票,我将合并为一张,但我想你来这里是为了更多。
答案 2 :(得分:1)
我会做类似的事情:
int tries = 0;
int maxTries = 3;
do {
openFile = new AppFileDialog().chooseFile("Save", appFrame);
if (openFile != null)
tries = maxTries;
tries++;
} while (tries < maxTries);
if (openFile == null)
return;
答案 3 :(得分:0)
我会尝试摆脱那种副作用(在chooseFile方法中设置openFile),因为它使代码很难遵循。你不能退货吗?
虽然不会解决双重空检查。
答案 4 :(得分:0)
它们实际上是不同的条件。我认为你的真正含义是:
if (openFile == null) {
openFile = new AppFileDialog().chooseFile("Save", appFrame);
if (openFile == null) {
return;
}
}
这表明它们并不意味着相同的东西,但如果您希望添加更多条件(更多可以打开文件的方式,例如使用默认文件名,如果用户不提供本人)
但是我更喜欢:
openFile = getOpenFile()
if(openFile == null)
return;
public File getOpenFile() {
if(openFile == null)
openFile = new AppFileDialog().chooseFile("Save", appFrame);
return openFile;
}
这允许getOpenFile()方法完全控制openFile变量,从不从任何其他方法访问openFile变量(可能除了closeFile()方法。我有时会使用这个技巧,制作一个“逻辑上私有”的变量为了降低复杂性,只需要几种方法。
答案 5 :(得分:0)
您可以尝试这样的操作,但这假定chooseFile
将返回该文件。
if ((openFile == null ? new AppFileDialog().chooseFile("Save", appFrame) : openFile) == null)
return;