tags:

views:

229

answers:

1

Hi. how can i set a field in a class that it's name is dynamic and stored in a string variable ?

public class test {

    public String a1;
    public string a2;  

    public test(String key) {
        this.key='found';  <--- error
    } 

}
+2  A: 

You have to use reflection:

Here's an example which deals with the simple case of a public field. For the more normal situation of private fields, you would need to loop through the declared fields. A nicer alternative would be to use properties, if possible.

import java.lang.reflect.Field;

class DataObject
{
    // I don't like public fields; this is *solely*
    // to make it easier to demonstrate
    public String foo;
}

public class Test
{
    public static void main(String[] args)
        // Declaring that a method throws Exception is
        // likewise usually a bad idea; consider the
        // various failure cases carefully
        throws Exception
    {
        Field field = DataObject.class.getField("foo");
        DataObject o = new DataObject();
        field.set(o, "new value");
        System.out.println(o.foo);
    }
}
Jon Skeet
set() asks me for two parameters, Object and value,why not just value? what's the first parameter ? - Field classField = this.getClass().getField(objField.getName()); classField.set(Object,Value)
ufk
thanks the example cleared everything :)
ufk
@ufk: The first parameter is the object for which you want to set the field. Note that you got the `Field` instance by querying the class - there is nothing that links it to a particular instance of that class.
Michael Borgwardt