最初,我直接在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
当我遇到这样的异常时,循环停止并且我无法读取其他属性
答案 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());
了解更多信息?运营商:
答案 2 :(得分:0)
使用org.apache.commons.lang.StringUtils
info.setUserName(StringUtils.defaultIfEmpty(attribute.get("fullName"), "N/A"));
或者您可以使用私有方法来处理它以减少代码