如何使用反射或任何其他实用程序完全打印JavaBean
我有一个Java bean类如何使用反射或任何其他实用程序完全打印JavaBean,java,jakarta-ee,reflection,javabeans,Java,Jakarta Ee,Reflection,Javabeans,我有一个Java bean类Person,包含3个变量: 名称(字符串) 年龄(字符串) 地址(对象) 地址包含3个变量: 街头 门号 城市 我想有一个实用程序,可以打印Person中的所有变量 我的意思是它应该打印Person&以及其中包含的地址对象 我可以创建一个hashmap,并使用反射和JSP中的打印键/值UI来放置变量名和值,但问题是我必须为Address应用反射来在hashmap中添加变量/值 是否有实用程序可以执行此操作?您可以从中使用 从文件: 此方法的典型调用如下所示:
Person
,包含3个变量:
- 名称(字符串)
- 年龄(字符串)
- 地址(对象)李>
地址
包含3个变量:
- 街头
- 门号
- 城市
Person
中的所有变量
我的意思是它应该打印Person
&以及其中包含的地址
对象
我可以创建一个hashmap,并使用反射和JSP中的打印键/值UI来放置变量名和值,但问题是我必须为Address
应用反射来在hashmap中添加变量/值
是否有实用程序可以执行此操作?您可以从中使用
从文件:
此方法的典型调用如下所示:
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
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();
}
}
或者,有一种方法使用反射来确定
要测试的字段。因为这些字段通常是私有的,
ReflectionString,使用AccessibleObject.setAccessible更改
字段的可见性。在安全管理器的管理下,这将失败,
除非正确设置了相应的权限。也是
比显式测试慢。
此方法的典型调用如下所示:
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
您可能正在寻找Apache Commons。您可以实现
toString
方法来打印您想要的任何内容,或者您可以使用Apache CommonstoString构建器及其ReflectionString
方法。我不相信这会在属性中循环出现(例如address),但是如果您想看到用Street、Door No和City打印出来的地址,请使用Implementation它的toString
方法来打印该信息。您可能会发现JacksonJSON序列化程序在这方面很有用。Jackson库可能已经是您的堆栈的一部分。如果没有,请在下面查找所需的依赖项
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);
}
}
样本输出:
{“姓名”:“约翰·多伊”,“年龄”:42}
所需的maven/gradle依赖项:
- jackson core,groupId=com.fasterxml.jackson.core
- jackson数据绑定,groupId=com.fasterxml.jackson.core
这不是这些对象上的#toString()
应该做的吗?您可以在toString方法之外使用toString Builder。ToStringBuilder.ReflectionString(其他对象)您可以这样使用:ToStringBuilder.ReflectionString(objectRetrieved)
与Jeff完全一样explained@FranciscoSpaeth如果你有一个列表变量呢?列出爱好;如何设置该toString?本机列表实现已经存在一个toString()
,它将输出由每个项的toString()
组成的字符串。在String
情况下,将输出类似[Item1,Item2,Item3]
的内容,因为它使用String
类的toString()
。这意味着输出取决于该列表存储的对象类,因此您可能希望覆盖类的toString()
方法,以获得一个好的list
输出,这可以使用提供的答案完成:)