Java 使用反射API获取字段名和值
我正在创建许多POJO,并且必须为每个POJO创建Java 使用反射API获取字段名和值,java,reflection,Java,Reflection,我正在创建许多POJO,并且必须为每个POJO创建toString()方法。我认为创建一个类来使用反射API为我完成工作会更容易,而不是手工编写每个类——在一个地方创建功能,并在每个POJO中使用它 POJO中的所有字段都是私有的。POJO是JSON对象的Java对象表示 要求遍历类中的字段,并列出字段和值 我目前正在一个名为ChannelResource的类上测试该功能。 下面是我用来列出字段名和值的类: import java.lang.reflect.Field; publ
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();
}
}
}}
编者说:
java.lang.IllegalAccessException: Class ToStringMaker can not access a member of class ChannelResource with modifiers "private"
ToStringMaker
如果我将所有成员公开,它就可以工作,但我真的不想这样做。有没有其他方法可以获取私有字段的值
我知道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();
}
}
}}
import java.lang.reflect.Field;
公共类ToStringMaker{
公共ToString Maker(对象o){
Class试试这个
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();
}
}
}}
import java.lang.reflect.Field;
公共类ToStringMaker{
公共ToString Maker(对象o){
等级