2012-05-26 20 views
5

tengo un grano, hay una manera de hacer una lista de todas las propiedades de frijol sin lista uno por uno?Cómo enumerar las propiedades del bean

Algunos granos overide el método ToString() que es práctico. Howvere los frijoles que no anula este método?

+0

toString() es un método. No es una propiedad de frijol. ¿Qué es exactamente lo que quiere hacer? ¿Has navegado por java.lang.Class javadoc? –

+0

Si esto está dentro de Eclipse y que está satisfecho con el código generado, y luego considerar simplemente dejar Eclipse AutoGenerate ella. Mire en el menú de clic derecho -> Fuente. –

Respuesta

2

Puede utilizar la reflexión. Tome campos declarados de la clase, que son cheque privada si tienen setters y getters (recuerde captador booleano es "isProperty")

El código puede tener este aspecto:

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); 
+1

Parece mucho código. Cualquier forma de simplificar el proceso? –

+1

Hay pocas clases en el paquete 'java.bean' que podrían simplificarlo, pero no estoy seguro de si desea usarlas. Por ejemplo, qué propiedades encuentras en 'clase Persona {int privado altura; public getHeight() {..} publicsetHeight (int h) {..} boolean isTall() {return height> 180;}} '? Si utilizamos mi enfoque sólo obtendrá solamente 'altura característica, pero si va a utilizar estas clases de ayuda obtendrá' 'altura característica tall' sino también' class' ya que cada clase tiene getClass método '(). – Pshemo

+0

Gracias, estoy interesado en analizar todas las propiedades de Bean después de la deserialización de GSON. Esto es para mi aplicación de Android. –

4

Puede utilizar BeanInfo través BeanIntrospection de la siguiente manera:

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) { 
} 

O usted puede ir con el método de reflexión usando uno de los siguientes enfoques:

  1. obtener todos sin parámetros getXXX() métodos a través getDeclaredMethods y recorrerlos
  2. Obtener todos los campos usando getDeclaredFields() y recorrerlos (No cumple con las especificaciones de Bean, si te importa)
0

Usted podría estar interesado en BeanInfo, una clase que puede acompañar a una clase de frijol, sin que la clase bean necesita ser alterado. Se usa en muchos constructores de GUI para mostrar las propiedades de un bean, pero su uso no es GUI también.

Cuestiones relacionadas