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 } }
You can access all the variables by using the subclass object, and you don't have to create an object of the parent class. This scenario only happens when the class is extended; otherwise, the only way to access it is by using the subclass.
Use the member-access operator ( . ) between the object variable name and the member name. If the member is Shared, you do not need a variable to access it.
You declare a class's member variables with the body of the class. Typically, you declare a class's variables before you declare its methods, although this is not required. Note: To declare variables that are a member of a class, the declarations must be within the class body, but not within the body of a method.
You have to use reflection:
Class.getField()
to get a Field
reference. If it's not public you'll need to call Class.getDeclaredField()
insteadAccessibleObject.setAccessible
to gain access to the field if it's not publicField.set()
to set the value, or one of the similarly-named methods if it's a primitiveHere'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); } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With