How to list bean properties

I have a bean, is there a way to list the bean of all properties without a list one by one?

Some beans use the ToString () method, which is convenient. Howvere beans, which does not cancel this method?

+5
source share
4 answers

You can use reflection. Take the declared fields from the class, these are private checks if they have setters and getters (remember that boolean getter is isproperty)

The code might look like this:

List<String> properties = new ArrayList<String>();
Class<?> cl = MyBean.class;

// check all declared fields
for (Field field : cl.getDeclaredFields()) {

    // if field is private then look for setters/getters
    if (Modifier.isPrivate(field.getModifiers())) {

        // changing 1st letter to upper case
        String name = field.getName();
        String upperCaseName = name.substring(0, 1).toUpperCase()
                + name.substring(1);
        // and have getter and setter
        try {
            String simpleType = field.getType().getSimpleName();
            //for boolean property methods should be isProperty and setProperty(propertyType)
            if (simpleType.equals("Boolean") || simpleType.equals("boolean")) {
                if ((cl.getDeclaredMethod("is" + upperCaseName) != null)
                        && (cl.getDeclaredMethod("set" + upperCaseName,
                                field.getType()) != null)) {
                    properties.add(name);
                }
            } 
            //for not boolean property methods should be getProperty and setProperty(propertyType)
            else {
                if ((cl.getDeclaredMethod("get" + upperCaseName) != null)
                        && (cl.getDeclaredMethod("set" + upperCaseName,
                                field.getType()) != null)) {
                    properties.add(name);
                }
            }
        } catch (NoSuchMethodException | SecurityException e) {
            // if there is no method nothing bad will happen
        }
    }
}
for (String property:properties)
    System.out.println(property);
+2
source

You can use BeanInfo through BeanIntrospection as follows:

Object o = new MyBean();
try {
    BeanInfo bi = Introspector.getBeanInfo(MyBean.class);
    PropertyDescriptor[] pds = bi.getPropertyDescriptors();
    for (int i=0; i<pds.length; i++) {
        // Get property name
        String propName = pds[i].getName();

        // Get the value of prop1
        Expression expr = new Expression(o, "getProp1", new Object[0]);
        expr.execute();
        String s = (String)expr.getValue();
    }
    // class, prop1, prop2, PROP3
} catch (java.beans.IntrospectionException e) {
}

Or you can go using the reflection method using one of the following methods:

  • getXXX() getDeclaredMethods
  • , getDeclaredFields(), ( Bean, )
+4

see apache commons lang - ReflectionToStringBuilder

+3
source

You might be interested in BeanInfo , a class that can accompany a bean class, without the need for a bean class to change. It is used in many GUI builders to display bean properties, but also uses it not a GUI.

0
source

All Articles