java - 反射的好处 - 反射的意义




如何使用反射或任何其他实用程序完全打印Java Bean (3)

你可以使用Apache Commons的 ToStringBuilder

从文档:

此方法的典型调用如下所示:

 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }

更多细节:

这个类可以为任何类或对象构建一个良好且一致的toString()。 本课旨在通过以下方式简化流程:

允许字段名称处理所有类型一致地处理空值一致地输出数组和多维数组,从而使对象和集合处理类层次结构的详细级别得到控制要使用此类写入代码,如下所示:

 public class Person {
   String name;
   int age;
   boolean smoker;

   ...

   public String toString() {
     return new ToStringBuilder(this).
       append("name", name).
       append("age", age).
       append("smoker", smoker).
       toString();
   }
 }

或者,有一种方法使用反射来确定要测试的字段。 因为这些字段通常是私有的,所以方法reflectionToString使用AccessibleObject.setAccessible来更改字段的可见性。 这将在安全管理器下失败,除非适当的权限设置正确。 这也比明确测试慢。 此方法的典型调用如下所示:

 public String toString() {
   return ToStringBuilder.reflectionToString(this);
 }

我有一个Java bean类Person包含3个变量:

  • 名称(字符串)
  • 年龄(字符串)
  • 地址(Object)。

Address包含3个变量:

  • door_no

我想有一个实用工具,应该打印所有变量的Person

通过这个我的意思是它应该打印PersonAddress对象包含在它。

我可以创建一个哈希映射,并使用反射和打印键/值UI在JSP中的变量名称和值,但问题是我必须应用反射Address添加变量/值在哈希映射。

有没有可用的工具来做到这一点?



您可能会发现Jackson JSON序列化程序对此有用。 杰克逊图书馆可能已经是你的堆栈的一部分。 如果没有,请在下面找到所需的依赖关系。

private static final ObjectMapper OBJECT_MAPPER_SINGLETON = new ObjectMapper();
public static String toStringUsingJackson(final Object object) {
    try {
        return OBJECT_MAPPER_SINGLETON.writeValueAsString(object);
    } catch (final JsonProcessingException e) {
        return String.valueOf(object);
    }
}

示例输出:

{“name”:“John Doe”,“年龄”:42}

所需的Maven / Gradle依赖关系

  • jackson-core,groupId = com.fasterxml.jackson.core
  • jackson-databind,groupId = com.fasterxml.jackson.core




javabeans