Reflection permite unui program să inspecteze și manipuleze clase, metode și câmpuri la runtime — chiar și pe cele necunoscute la compile time. Annotations atașează metadate la cod pe care tool-urile și framework-urile le citesc (adesea prin reflection) pentru a conduce comportamentul. Împreună, acestea alimentează o mare parte din "magia" framework Java (Spring, JPA, JUnit).
Reflection — inspectare și invocație la runtime
Class<?> clazz = Class.forName();
(Field field : clazz.getDeclaredFields()) {
System.out.println(field.getName() + + field.getType());
}
(Method method : clazz.getDeclaredMethods()) {
System.out.println(method.getName());
}
clazz.getDeclaredConstructor().newInstance();
clazz.getMethod(, String.class);
m.invoke(instance, );
clazz.getDeclaredField();
f.setAccessible();
