[英]Can I avoid repeating myself in this situation (Java)
if (openFile == null) {
new AppFileDialog().chooseFile("Save", appFrame);
}
if (openFile == null) {
return;
}
在这里,我需要检查用户是否已经选择了一个文件。 如果没有,他们会得到提示。 如果文件仍为null,则函数将返回而不保存。 问题是两个相同的if语句,我可以避免吗? 我非常认真地对待DRY,但同时KISS。 理想情况下,这两者是相辅相成的,但在这种情况下,似乎它们是相互排斥的。
虽然我认为不同的结构会使问题更加明显,但并不完全如此:
// 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;
}
}
把它放在一个循环中? 用户选择的文件永远不应为null
但是你已经删除了太多的代码给出了具体的答案。 我所看到的只是两张相同的支票,我会合并成一张,但我想你来这里是为了更多。
生病做的事情如下:
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;
我会尝试摆脱那种副作用(在chooseFile方法中设置openFile),因为它使代码很难遵循。 你不能退货吗?
但它不会解决双重空检查。
它们实际上是不同的条件。 我认为你的意思是:
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()方法。我有时使用这个技巧,使一个“逻辑上私有”的变量只是一个耦合方法以减少复杂性。
您可以尝试这样的方法,但这假设chooseFile
将返回该文件。
if ((openFile == null ? new AppFileDialog().chooseFile("Save", appFrame) : openFile) == null)
return;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.