ReflectionEngine { public Object getFieldValue(Object obj, Field field) { Object fieldValue = null; try { fieldValue = field.get(obj); } catch (Exception e) { logger.log(Level.SEVERE, "Error while fetching field value of " + field, e); throw new Py4JException(e); } return fieldValue; }  Object createArray(String fqn, int[] dimensions); Class<?> getClass(Class<?> clazz, String name); Class<?>[] getClassParameters(Object[] parameters); MethodInvoker getConstructor(Class<?> clazz, Class<?>[] parameters); MethodInvoker getConstructor(String classFQN, Object[] parameters); Field getField(Class<?> clazz, String name); Field getField(Object obj, String name); Field getField(String classFQN, String name); Object getFieldValue(Object obj, Field field); Method getMethod(Class<?> clazz, String name); MethodInvoker getMethod(Class<?> clazz, String name, Class<?>[] parameters); MethodInvoker getMethod(Object object, String name, Object[] parameters); MethodInvoker getMethod(String classFQN, String name, Object[] parameters); Object invoke(Object object, MethodInvoker invoker, Object[] parameters); void setFieldValue(Object obj, Field field, Object value); String[] getPublicMethodNames(Object obj); String[] getPublicFieldNames(Object obj); String[] getPublicStaticFieldNames(Class<?> clazz); String[] getPublicStaticMethodNames(Class<?> clazz); String[] getPublicStaticClassNames(Class<?> clazz); String[] getPublicStaticNames(Class<?> clazz); final static int cacheSize; final static Object RETURN_VOID; }
@Test public void testGetFieldValue() { Cat cat = new Cat(); assertEquals(rEngine.getFieldValue(cat, rEngine.getField(cat, "age2")), 2); assertEquals(rEngine.getFieldValue(cat, rEngine.getField(cat, "CONSTANT")), "Salut!"); assertEquals(rEngine.getFieldValue(null, rEngine.getField(cat, "CONSTANT")), "Salut!"); }