是否有一种抽象的方法来获取java中实体的所有属性?

时间:2013-02-27 12:25:26

标签: java properties entity

我在Windows 7上使用Netbeans 7.2.1。

我试图获取实体的所有属性并将它们存储在String数组中。我想以我能想到的最普遍的方式做到这一点,所以像jCSV中那样的方法:

public void writeAll(List<E> data) throws IOException {
    for (E e : data) {
        write(e);
    }
}

您可以在此处找到该软件包:https://code.google.com/p/jcsv/

public String[] getProperties( E e ){

    String [] properties = new String[ e.numberOfProperties ];
    int i = -1;

    for ( P p : e ) {

        i += 1;
        properties[i] = p.toString(); // OR properties[i] = e.getProperty[i].toString();

    }

    return properties;
}

我觉得应该有一些方法可以使用the Properties class进行此操作,但我无法找到一种方法来使用它来从实体获取属性。我认为这只是一些简单的事情,但我看不到哪里。

1 个答案:

答案 0 :(得分:1)

@Ian Roberts暗示要查看java Introspector类here。只有在使用标准Java bean命名约定来访问实体属性时,该类才有用。

您要做的是使用BeanInfo方法获取课程的Introspector#getBeanInfo(Class beanClass),然后使用getMethodDescriptors()的{​​{1}}方法检索所有bean的“getter”方法。从那里,您可以迭代它们并获取实体的属性并在其上调用BeanInfo

使用此类而不是仅仅使用普通的旧反射的一个优点是,它在对类进行了内省后可以缓存类的toString(),从而获得性能提升。您也无需在反射代码中对BeanInfoget等任何内容进行硬编码。

以下是使用内置检查器的set方法的示例:

getProperties

此示例编译并运行。

请记住,Apache Commons还有一个库BeanUtils,它对这类内容非常有帮助(Javadoc here)。