Jenkov.com
Tutorials Books About
Java Reflection

1 Java Reflection Tutorial
2 Java Reflection - Classes
3 Java Reflection - Constructors
4 Java Reflection - Fields
5 Java Reflection - Methods
6 Java Reflection - Getters and Setters
7 Java Reflection - Private Fields and Methods
8 Java Reflection - Annotations
9 Java Reflection - Generics
10 Java Reflection - Arrays
11 Java Reflection - Dynamic Proxies
12 Java Reflection - Dynamic Class Loading and Reloading




Java Reflection - Fields


Using Java Reflection you can inspect the fields (member variables) of classes and get / set them at runtime. This is done via the Java class java.lang.reflect.Field. This text will get into more detail about the Java Field object. Remember to check the JavaDoc from Sun out too.

Obtaining Field Objects

The Field class is obtained from the Class object. Here is an example:

Class aClass = ...//obtain class object
Field[] methods = aClass.getFields();

The Field[] array will have one Field instance for each public field declared in the class.

If you know the name of the field you want to access, you can access it like this:

Class  aClass = MyObject.class
Field field = aClass.getField("someField");

The example above will return the Field instance corresponding to the field someField as declared in the MyObject below:

public class MyObject{
  public String someField = null;

}

If no field exists with the name given as parameter to the getField() method, a NoSuchFieldException is thrown.

Field Name

Once you have obtained a Field instance, you can get its field name using the Field.getName() method, like this:

Field field = ... //obtain field object
String fieldName = field.getName();

Field Type

You can determine the field type (String, int etc.) of a field using the Field.getType() method:

Field field = aClass.getField("someField");
Object fieldType = field.getType();

Getting and Setting Field Values

Once you have obtained a Field reference you can get and set its values using the Field.get() and Field.set()methods, like this:

Class  aClass = MyObject.class
Field field = aClass.getField("someField");

MyObject objectInstance = new MyObject();

Object value = field.get(objectInstance);

field.set(objetInstance, value);

The objectInstance parameter passed to the get and set method should be an instance of the class that owns the field. In the above example an instance of MyObject is used, because the someField is an instance member of the MyObject class.

It the field is a static field (public static ...) pass null as parameter to the get and set methods, instead of the objectInstance parameter passed above.



Connect with me: Newsletter - Get all my free tips!