我写了一些代码,只是想知道是否有一种更简洁的方法来做到这一点,以防我必须执行额外的条件?我不想使用嵌套的 if。
有没有办法让它更加面向对象?
if(!usernameExists)
{
if(!username.matches("^[\\pL\\pN]+$") ||
username.length() < 7 ||
username.length() > 25)
{
usernameValid=false;
Forms.Main.instructorForm.usernameField.setBackground(Color.red);
Forms.Main.instructorForm.usernameField.setToolTipText(
"<html>Only letters & numbers allowed!<br> Length must be between 6 and 26</html>");
}
else
{
Forms.Main.instructorForm.usernameField.setBackground(Color.white);
Forms.Main.instructorForm.usernameField.setToolTipText("");
}
}
else
{
usernameValid=false;
Forms.Main.instructorForm.usernameField.setBackground(Color.red);
Forms.Main.instructorForm.usernameField.setToolTipText(
"This username already exists!");
}
最佳答案
我对所呈现的逻辑的正确性不做任何假设,但对于向我展示的内容,我建议您重构并将第一个 boolean 值提取到单独的方法中。
if(!usernameExists) {
usernameValid = validateUsernameAndSetBackground(username);
} else {
// rest of code
}
public boolean validateUsernameAndSetBackground(String username) {
boolean result = true;
if(!username.matches("^[\\pL\\pN]+$") || username.length() < 7 || username.length() > 25) {
result = false;
Forms.Main.instructorForm.usernameField.setBackground(Color.red);
Forms.Main.instructorForm.usernameField.setToolTipText("<html>Only letters & numbers allowed!<br> Length must be between 6 and 26</html>");
} else {
Forms.Main.instructorForm.usernameField.setBackground(Color.white);
Forms.Main.instructorForm.usernameField.setToolTipText("");
}
return result;
}
还有其他重构机会 - 即背景颜色和字段的设置。但这解决了存在大量深层嵌套的条件子句的直接问题。
关于Java Nested Ifs - 可以通过编码最佳实践来解决吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21340316/