DEV Community

Cover image for How to get field values with Reflection and with direct memory access in Java
Roberto Gentili for Burningwave

Posted on • Updated on

How to get field values with Reflection and with direct memory access in Java

To get field values from an object in Java we are going to use Fields component. To start we need to add the following dependency to our pom.xml:

Fields component uses to cache all fields for faster access and in this code snippet we show how to handle the fields of any Java object even of anonymous type:

import static org.burningwave.core.assembler.StaticComponentContainer.Fields;

import java.lang.reflect.Field;
import java.util.Collection;
import java.util.List;
import java.util.Map;

import org.burningwave.core.classes.FieldCriteria;


@SuppressWarnings("unused")
public class FieldsHandler {

    public static void execute() {
        ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
        //Fast access by memory address
        Collection<Class<?>> loadedClasses = Fields.getDirect(classLoader, "classes");
        //Access by Reflection
        loadedClasses = Fields.get(classLoader, "classes");

        //Get all field values of an object through memory address access
        Map<Field, ?> values = Fields.getAllDirect(classLoader);
        //Get all field values of an object through reflection access
        values = Fields.getAll(classLoader);

        Object obj = new Object() {
            volatile List<Object> objectValue;
            volatile int intValue;
            volatile long longValue;
            volatile float floatValue;
            volatile double doubleValue;
            volatile boolean booleanValue;
            volatile byte byteValue;
            volatile char charValue;
        };

        //Get all filtered field values of an object through memory address access
        Fields.getAllDirect(
            FieldCriteria.forEntireClassHierarchy().allThoseThatMatch(field -> {
                return field.getType().isPrimitive();
            }), 
            obj
        ).values();
    }

    public static void main(String[] args) {
        execute();
    }

}
Enter fullscreen mode Exit fullscreen mode

In this short article we have learned how to get fields of Java objects and how to handle them and the complete source is available at this link.

Top comments (0)