Search code examples
javaloopsattributesiterationjavabeans

Looping javaBean attributes


I have a java bean

public class Bean {

private Object field1;
private Object field2;

public Object getField1() {
    return field1;
}

public void setField1(Object field1) {
    this.field1 = field1;
}

public Object getField2() {
    return field2;
}

public void setField2(Object field2) {
    this.field2 = field2;
}
}

I want to set the fields so I'm doing this hardcoded

Bean c1 = new Bean();

c1.setField1(hmap.get(headers[1]));
c1.setField2(hmap.get(headers[2]));

I would like to do this with a cycle because I have 17 fields.

for (count = 1; count < headers.length; count++) {
c1.setField1,2,3...("Parameter_" + count, messages.getString("field." + headers[count]));}

How can I implement this? Using JDK 16


Solution

  • Using Reflection, as follows:

        Bean c1 = new Bean();
    
        c1.setField1("Object 1");
        c1.setField2("Object 2");
    
        for (int count = 1; count < headers.length; count++) 
        {
            //concatenate to get method name
            String methodName = "getField" + count;
    
            // using reflection, get collection of all methods in Bean class
            Method[] methods = Bean.class.getMethods();
    
            for(Method method : methods)
            {
                if (method.getName().equals(methodName))
                {
                    // if it's the method you want, invoke it using 
                    // the required params
                    method.invoke("Parameter_" + count, messages.getString("field." + headers[count]));
                }
            }
        }