首页 > 解决方案 > 带有布尔参数的 Passy 密码生成器

问题描述

想知道解决这个问题的最佳方法。输入:将使用 passayPassGenerator 并设置布尔值。

问题:想根据包装函数调用中设置的布尔值返回密码字符串

使用 if else/switch 的问题是要处理的组合的绝对数量

private String passayPassGenerator(int len, boolean uppr, boolean lowr, boolean num, boolean spec) {
    CharacterRule upperCase = new CharacterRule(EnglishCharacterData.UpperCase);
    CharacterRule numbers = new CharacterRule(EnglishCharacterData.Digit);
    CharacterRule lowerCase = new CharacterRule(EnglishCharacterData.LowerCase);
    CharacterRule special = new CharacterRule(EnglishCharacterData.Special);

    PasswordGenerator passwordGenerator = new PasswordGenerator();

    return passwordGenerator.generatePassword(len, upperCase, lowerCase, special, numbers);
}

标签: javapasswordsparameter-passing

解决方案


请注意,您可以将规则列表传递给generatePassword函数。因此,在这种情况下,您将首先使用规则构建一个列表,然后将其传递给函数。

像这样的东西:

private String passayPassGenerator(int len, boolean uppr, boolean lowr, boolean num, boolean spec) {
    CharacterRule upperCase = new CharacterRule(EnglishCharacterData.UpperCase);
    CharacterRule numbers = new CharacterRule(EnglishCharacterData.Digit);
    CharacterRule lowerCase = new CharacterRule(EnglishCharacterData.LowerCase);
    CharacterRule special = new CharacterRule(EnglishCharacterData.Special);

    List<CharacterRule> rules = new ArrayList<>();

    if (uppr) {
        rules.add(upperCase);
    }
    if (lowr) {
        rules.add(lowerCase);
    }
    if (num) {
        rules.add(numbers);
    }
    if (spec) {
        rules.add(special);
    }

    PasswordGenerator passwordGenerator = new PasswordGenerator();

    return passwordGenerator.generatePassword(len, rules);
}

推荐阅读