Java中有没有办法迭代对象的属性?就像这样:
class SomeClass {
private Object field_1;
private Object field_2;
...
private Object field_n;
// methods here
}
其中o.field(i)引用o.field_i?
答案 0 :(得分:2)
也许我误解了你的问题,但如果你想操纵JSON和Java对象,你应该考虑使用像Genson或Jackson这样的库。
如果你真的想检查你的班级'属性(你不应该真正考虑因为它不是真正干净的编码)你可以考虑反射,如Andremoniy所示
编辑: 对不起,正如Vogel612所说,我会解释。 阅读发表评论后,您似乎在JSON上的REST WebServices上收到消息,然后转换为Java Object。
如果我错了,请纠正我,但我认为你想要操纵你的Java对象并获得JSON,或者反过来而不用手工编写所有内容。
如果它是你需要的,你可以考虑我之前引用的库,我会从谷歌添加Gson。这些库提供了几种方法,可以自动将Java对象转换为JSON,将JSON转换为Java对象,而无需费力的转换编码。
答案 1 :(得分:1)
当然可以,但不建议,尽可能避免不惜一切代价。
此代码:
import java.lang.reflect.Field;
public class JavaApplication24 {
public Integer x;
public Integer y;
public static void main(String[] args) throws IllegalArgumentException, IllegalAccessException {
JavaApplication24 app = new JavaApplication24();
app.x = 10;
app.y = 20;
for (Field f : app.getClass().getDeclaredFields()) {
System.out.println(f.getName());
System.out.println(f.getType());
System.out.println(f.toGenericString());
System.out.println(f.get(app));
}
}
}
有这个输出
x
class java.lang.Integer
public java.lang.Integer javaapplication24.JavaApplication24.x
10
y
class java.lang.Integer
public java.lang.Integer javaapplication24.JavaApplication24.y
20
Google反思以获取更多信息。
答案 2 :(得分:0)
当然,您可以通过reflection
。但它并不是处理对象字段的真正有效方式:
public static Object getFieldValue(SomeClass someClass, int i ) {
try {
Field declaredField = SomeClass.class.getDeclaredField("field_" + i);
declaredField.setAccessible(true);
Object value = declaredField.get(someClass);
declaredField.setAccessible(false);
return value;
} catch (NoSuchFieldException | IllegalAccessException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}
答案 3 :(得分:0)
您可以使用Apache commons BeanUtils
获取所有属性及其值。
请参考describe()
或PropertyUtils
课程中的PropertyBeanUtils
。
E.g。
TestBean bean = new TestBean();
bean.setId(1);
bean.setName("test");
bean.setLastAccessed(new Date());
System.out.println(PropertyUtils.describe(bean));