使用空String初始化所有String成员

时间:2011-11-28 08:59:36

标签: java

我想将对象的所有String成员设置为空字符串,如果它们为null。

伪代码:

foreach member in object {
    if (member instanceof String and member == null) {
        member = '';
    }
}

实现这一目标的最简单方法是什么? 我可以使用的任何框架/工具? 通过反思写出我自己的解决方案?

5 个答案:

答案 0 :(得分:6)

public static void setEmpty(Object object) throws IllegalArgumentException, IllegalAccessException {
    Class<?> clazz = object.getClass();
    Field[] fields = clazz.getDeclaredFields();
    for (Field field : fields) {
        if (String.class.equals(field.getType())) {
            field.setAccessible(true);
            if (field.get(object) == null) {
                field.set(object, "");
            }
        }
    }
}

答案 1 :(得分:1)

您可以使用反射列出对象的所有字段,然后检查并更改它。如果它们是私有的,您可能必须修改访问级别。在搜索Google时,您可以找到很多关于此的教程,例如: this one

答案 2 :(得分:1)

尝试使用AspectJ:

@Aspect
public class StringHandler {
    @Around("execution(String com....YourClass.*(*))")
    public Object handle(ProceedingJoinPoint thisJoinPoint) throws Throwable {   
        String s = (String) thisJoinPoint.proceed();
        if (s == null){
           return "";
        }
        return s;
    }
}

这在运行时会更快,因为这个方面将被编译为字节码, 否则将在运行时使用反射并减慢您的应用程序。

答案 3 :(得分:0)

另一种方法是编写一个实用程序,该实用程序生成将空字符串设置为特定对象成员的代码。

答案 4 :(得分:0)

支持可重用设计,您应该考虑使用默认值作为空值,就像Apache的常见defaultString API一样,如下所示:

public String getValue(String value){
   return StringUtils.defaultString(value);
}

您还可以考虑使用defaultString(String str,String defaultStr),以便在有任何理由时可以选择将默认值更改为任何内容。

StringUtils documentation