java - 具有切换选项的功能

标签 java enums

我制作了一个基本功能来检查密码是否符合各种业务规则。有大写字符、数字等。

我想通过根据需要打开和关闭这些选项来使此功能更加灵活和可配置。我能想到的唯一方法是:

public static boolean isPasswordValid(String pwd, boolean checkUpper, boolean checkLower, boolean checkNum) {
    boolean hasUppercase = !pwd.equals(pwd.toLowerCase(Locale.getDefault()));
    boolean hasLowercase = !pwd.equals(pwd.toUpperCase(Locale.getDefault()));
    boolean hasNumeric = pwd.matches(".*\\d+.*");

    boolean isValid = false;

    if(checkUpper){
        if(hasUppercase) {
            isValid = true;
        }else{
            return isValid;
        }
    }

    return isValid;
}

我觉得有一个更好的方法,使用枚举或其他东西。我希望能够传递密码和一个额外的参数作为启用各种检查的标志。随着时间的推移,我不可避免地需要添加更多内容。

如果我要使用枚举,按照我的思维方式,我必须为每种可能的情况定义一个 eNum。即上、上和下、上和数字。如果我必须添加更多选项,这将变得非常复杂。

任何想法和建议都将受到欢迎。谢谢。

最佳答案

您可以使用 EnumSet,它是专门用于枚举的集合。

public static enum Validation {
    UPPER, LOWER, DIGIT //etc.
}

public static boolean isPasswordValid(String pwd, EnumSet<Validation> validations) {
//...
}

然后,您可以通过向集合中添加必要的值来使用任意验证组合。示例:

EnumSet<Validation> validation = EnumSet.of(Validation.UPPER, Validation.LOWER);
if (isPasswordValid(pass, validation)) {
    //...
}

关于java - 具有切换选项的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28717202/

相关文章:

java - 扫描仪不接受我提供的输入

Java:同步如果改变则不会阻塞

java - 如何在 Java 中使用 ENUM 生成随机数

java - 如何通过 int 或 string 访问枚举

c++ - C++中枚举的字符串

java - Eclipse 类未在特定工作区中编译

java - SpringBoot v1.5.14.RELEASE - 从测试资源文件夹读取文件

swift - 枚举值和谓词

java - 我可以在 @Cacheable 中使用枚举吗

Java drawRect() 方法的尺寸很奇怪/错误