【发布时间】:2017-05-25 11:34:41
【问题描述】:
我正在创建许多 POJO,并且必须为每个创建 toString() 方法。我认为创建一个类来使用反射 API 为我完成工作会更容易,而不是手动编码——在一个地方创建功能并在每个 POJO 中使用它。
POJO 中的所有字段都是私有的。 POJO 是 JSON 对象的 Java 对象表示。
要求是遍历类中的字段,并将字段与值一起列出。
我目前正在一个名为 ChannelResource. 的类上测试该功能
这是我用来列出字段名称和值的类:
import java.lang.reflect.Field;
public class ToStringMaker {
public ToStringMaker( Object o) {
Class<? extends Object> c = o.getClass();
Field[] fields = c.getDeclaredFields();
for (Field field : fields) {
String name = field.getName();
try {
System.out.format("%n%s: %s", name, field.get(o));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}}
我将ChannelResource 类的一个实例传递给构造函数。
编译器不喜欢这一行中的field.get(o):
System.out.format("%n%s: %s", name, field.get(o));
编译器说:
java.lang.IllegalAccessException: Class ToStringMaker can not access a member of class ChannelResource with modifiers "private"
ToStringMaker 如果我将所有成员都公开就可以工作,但我真的不想那样做。还有其他方法可以获取私有字段的值吗?
我知道 Apache 组织有一些东西可以创建 toString 功能,但我不喜欢这种格式。
【问题讨论】:
标签: java reflection