【问题标题】:Iterate over object attributes in java [duplicate]迭代java中的对象属性[重复]
【发布时间】:2011-09-19 08:00:21
【问题描述】:

可能重复:
How to loop over a Class attributes in Java?

class Foo{
    int id;
    String name;
    int bar;
    int bar2;

    //..
}

Foo foo = new Foo();

有没有办法在java中迭代这个对象的属性?我想创建一个 INSERT 查询,我必须转换字符串中的所有 int 属性。当不同类型的属性比较多的时候就有点问题了。

谢谢!

【问题讨论】:

  • 本题不重复,一件事是循环CLASS属性,另一件事是循环OBJECT属性。

标签: java database


【解决方案1】:
Class cls = Class.forName("Foo");
Field[] fields = cls.getDeclaredFields();

应该使用反射返回类的所有声明字段。 更多信息@http://java.sun.com/developer/technicalArticles/ALT/Reflection/

【讨论】:

    【解决方案2】:

    如果属性的顺序不相关,请使用Apache Commons BeanUtils:

    Foo foo = new Foo();
    Map<String, Object> fields = (Map<String, Object>) BeanUtils.describe(foo);
    

    请注意,BeanUtils 不使用泛型,因此需要强制转换。

    附加说明:您的对象必须遵守 JavaBeans 规范才能使用此方法。

    【讨论】:

      【解决方案3】:

      您可以使用 Java 反射来做到这一点。

      【讨论】:

        【解决方案4】:

        你可以通过调用 Foo.class 对象的 getDeclaredFields() 方法来获取 Foo 类的所有字段(如果你手头有类实例,则可以调用 foo.getClass().getDeclaredFields()。

        getDeclaredFields() 返回一个 Field 对象数组(在 java.lang.reflect 包中声明)。

        您似乎想要使用数据库中的对象,因此最好看一下 Java Persistence API 而不是手动生成 INSERT 语句,因为这将为您提供更多而不必工作太多在 SQL 上手动操作。

        【讨论】:

          猜你喜欢
          • 2011-06-18
          • 2012-07-23
          • 2012-02-14
          • 2021-12-04
          • 1970-01-01
          • 2023-03-24
          • 2015-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多