Java中的对象属性作为数组或列表元素

时间:2015-04-15 08:20:21

标签: java

Java中有没有办法迭代对象的属性?就像这样:

class SomeClass {
    private Object field_1;
    private Object field_2;
    ...
    private Object field_n;

    // methods here

}

其中o.field(i)引用o.field_i?

4 个答案:

答案 0 :(得分:2)

也许我误解了你的问题,但如果你想操纵JSON和Java对象,你应该考虑使用像GensonJackson这样的库。

如果你真的想检查你的班级'属性(你不应该真正考虑因为它不是真正干净的编码)你可以考虑反射,如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

http://commons.apache.org/proper/commons-beanutils/javadocs/v1.9.2/apidocs/org/apache/commons/beanutils/PropertyUtils.html#describe(java.lang.Object)

E.g。

TestBean bean = new TestBean();
bean.setId(1);
bean.setName("test");
bean.setLastAccessed(new Date());
System.out.println(PropertyUtils.describe(bean));