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

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

伪代码:

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

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

 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, ""); } } } } 

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

尝试使用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; } } 

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

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

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

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

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

StringUtils 文档