gpt4 book ai didi

java - 使用反射API获取字段名称和值

转载 作者:行者123 更新时间:2023-12-01 20:24:10 25 4
gpt4 key购买 nike

我正在创建许多 POJO,并且必须为每个 POJO 创建 toString() 方法。我认为使用反射 API 创建一个类来为我完成工作会更容易,而不是对每个项目进行手动编码——在一个地方创建功能并在每个 POJO 中使用它。

POJO 中的所有字段都是私有(private)的。 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 就可以工作,但我真的不想这样做。还有其他方法获取私有(private)字段的值吗?

我知道 Apache 组织有一些可以创建 toString 功能的东西,但我不喜欢这种格式。

最佳答案

试试这个

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();
field.setAccessible(true);
try {
System.out.format("%n%s: %s", name, field.get(o));
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}}

关于java - 使用反射API获取字段名称和值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44165554/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com