33

How can I set or get a field in a class whose 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
  • Although there are valid reasons for doing this, if you are trying to do this you are probably doing something very wrong. Commented Jan 24, 2010 at 16:24
  • 2
    Your code example is very confusing. Commented Mar 26, 2015 at 12:22

2 Answers 2

52

You have to use reflection:

Here's an example which deals with the simple case of a public field. 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);
    }
}
Sign up to request clarification or add additional context in comments.

3 Comments

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: 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.
and if it is not a primitive ? In my case it's another class (an array of classes which I want to set/change/allocate)
2
Class<?> actualClass=actual.getClass();

Field f=actualClass.getDeclaredField("name");

The above code would suffice .

object.class.getField("foo");

Unfortunately the above code didn't work for me , since the class had empty field array.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.