如果attribute返回empty / null,则自动将其设置为" N / A"没有if - then条件的值

时间:2016-10-05 08:29:49

标签: java loops null ldap

最初,我直接在getter setter模型中设置我的属性值,而不测试该属性是空还是null。

String urlLDAP = "ldap://localhost:389/";
NamingEnumeration results = null;
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory");
env.put(Context.PROVIDER_URL, urlLDAP);
env.put(Context.SECURITY_AUTHENTICATION, "simple");
env.put(Context.SECURITY_PRINCIPAL, "cn=admin,ou=sa,o=system");         
env.put(Context.SECURITY_CREDENTIALS, "XXX");
DirContext context = new InitialDirContext(env);
SearchControls controls = new SearchControls();
controls.setSearchScope(SearchControls.SUBTREE_SCOPE);
results = context.search(recipientDN, "(objectclass=person)", controls);
while (results.hasMore()) {
    SearchResult searchResult = (SearchResult) results.next();
    Attributes attribute = searchResult.getAttributes();
    try{
        Info info = new Info();
        for (user : userList){          

            info.setUserName(attribute.get("fullName").toString());
            info.setdivision(attribute.get("division").toString());
            info.setAttr3(attribute.get("attribute3").toString());
            .
            .
            .
            .
            info.setAttr3(attribute.get("attribute16").toString());


        }
    }catch (NullPointerException ex) {
        Logger.getLogger(robotb.class.getName()).log(Level.SEVERE, null, ex);
    }
}

然后,我为每个属性添加if-else条件,因为我意识到并非所有用户都包含与其他用户相同的属性。 例如,用户A没有属性4和5,但用户B具有这两个属性。

for (user : userList){

        if(attribute.get("fullName").toString() != null)
            info.setUserName(attribute.get("fullName").toString())
        else 
            info.setUserName("N/A");

        if(attribute.get("division").toString() != null)
            info.setdivision(attribute.get("division").toString())
        else 
            info.setdivision("N/A");

        if (attribute3 != null)
        .
        .
        .

        if (attribute4 != null)
        .
        .
        .
        .
        .

        if (attribute16 ! null)
        .
        .
        .

    }

然而,这导致我的代码非常冗长。 还有其他方法可以使它更简单吗?很抱歉问这个愚蠢的问题 感谢您的建议

- 编辑

我添加了if-else条件以避免遇到例如此

的异常
Exception in thread "main" java.lang.NullPointerException

当我遇到这样的异常时,循环停止并且我无法读取其他属性

3 个答案:

答案 0 :(得分:1)

最简单的方法是创建一个检查值的方法。

private String fixValue(Object input){
    return input != null ? input.toString() : "N/A";
}

然后你可以在你的二传手上使用它:

info.setUserName(fixValue(attribute.get("fullName")))

如果你还想检查空字符串,你可以使用第二个字符串重载fixValue()方法,因此当它是一个字符串时它还检查atribute是否为空:

private String fixValue(String input){
    Object inputValue = input == null || input.isEmpty() ? null : input;
    return fixValue(inputValue);
}

编辑:

你可以像这样声明一个方法:

private String fixValue(Object input){      
    return input == null || input.toString().isEmpty() ? "N/A" : input.toString();
}

答案 1 :(得分:0)

使用可以使用吗? JAVA的运营商是这样的:

info.setdivision((attribute.get("division")==null)?"N/A":attribute.get("division").toString());

了解更多信息?运营商:

http://www.cafeaulait.org/course/week2/43.html

答案 2 :(得分:0)

使用org.apache.commons.lang.StringUtils

info.setUserName(StringUtils.defaultIfEmpty(attribute.get("fullName"), "N/A"));

或者您可以使用私有方法来处理它以减少代码