Tutorials (13 Part Series)
1 How to create your own dependency injection framework in Java
2 How to find all the classes of a package in Java
… 9 more parts…
3 How to get field values with Reflection and with direct memory access in Java
4 Optimizing CPU usage by performing tasks in parallel with different priorities in Java
5 How to bind methods or constructors to functional interfaces in Java
6 Generating classes at runtime and invoking their methods with and without the use of Reflection in Java
7 A fast and flexible way to scan the class paths in Java
8 Executing stringified source code in Java
9 How to scan the file system in Java
10 Invoking and handling privates and all other methods of an object with and without the use of Reflection in Java
11 Making applications created with old Java versions work on Java 9 and later versions
12 How to generate and compile sources at runtime in Java
13 Iterating collections and arrays in parallel by setting thread priority
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.
Tutorials (13 Part Series)
1 How to create your own dependency injection framework in Java
2 How to find all the classes of a package in Java
… 9 more parts…
3 How to get field values with Reflection and with direct memory access in Java
4 Optimizing CPU usage by performing tasks in parallel with different priorities in Java
5 How to bind methods or constructors to functional interfaces in Java
6 Generating classes at runtime and invoking their methods with and without the use of Reflection in Java
7 A fast and flexible way to scan the class paths in Java
8 Executing stringified source code in Java
9 How to scan the file system in Java
10 Invoking and handling privates and all other methods of an object with and without the use of Reflection in Java
11 Making applications created with old Java versions work on Java 9 and later versions
12 How to generate and compile sources at runtime in Java
13 Iterating collections and arrays in parallel by setting thread priority
原文链接:How to get field values with Reflection and with direct memory access in Java
暂无评论内容