【发布时间】:2015-12-18 03:52:56
【问题描述】:
这可能很常见,可能是一个愚蠢的问题,但我真的很想知道其他人如何处理这个问题。
说我有:
private void actionPerformed(ActionEvent evt){
String text = textfield.getText();
if(isValid(text)){
// do something eg:
list.add(text);
}
}
private boolean isValid(String text){
if(text.isEmpty()){
displayErrorMessage("empty string!");
return false;
}
if(hasInvalidChars(text)){
displayErrorMessage("Invalid chars");
return false;
}
....
return true;
}
isValid(String) 方法感觉怪怪的,我认为一个方法应该只做一件简单的事情,但是 isValid() 肯定违反了它,它显示一个错误消息然后返回一个布尔值。
这样好吗?还是有其他方法可以绕过它?
我能想到的另一个不太优雅的解决方法是实现一个标志。即:
private void actionPerformed(ActionEvent evt){
String text = textfield.getText();
verify(text);
if(!errorIsDisplayed){
list.add(text);
}
}
private boolean verify(String text){
if(text.isEmpty()){
displayErrorMessage("empty string!");
errorIsDisplayed = true;
}
if(hasInvalidChars(text)){
displayErrorMessage("Invalid chars");
errorIsDisplayed = true;
}
....
errorIsDisplayed = false;
}
我希望你能清楚地看到我试图解决的问题,我认为我缺少一个简单的解决方案,可能是由于睡眠不足和天气原因,我不知道。其他人将如何实现这一点?
【问题讨论】:
-
您可以根据 isValid 返回的内容在外部显示它们,而不是在方法内部显示消息,但是您将无法在其中区分两种情况。除了感觉怪异之外,您目前拥有的还有其他问题吗?
-
是的,这就是我当前的行动点,将 isValid() 的实现移动到 actionPerformed() 本身中。我只是觉得 actionPerformed() 会混乱。我认为拥有像 isValid() 这样的方法会以某种方式使代码在显示意图时更具可读性。
标签: java if-statement coding-style refactoring code-cleanup