@SuppressWarnings("unchecked")
  public static <R> R getField(final Object object, final String fieldName) {
    try {
      return traverseClassHierarchy(
          object.getClass(),
          NoSuchFieldException.class,
          traversalClass -> {
            Field field = traversalClass.getDeclaredField(fieldName);
            field.setAccessible(true);
            return (R) field.get(object);
          });
    } catch (Exception e) {
      throw new RuntimeException(e);
    }
  }
@Test
  public void getFieldReflectively_getsPrivateFields() {
    ExampleDescendant example = new ExampleDescendant();
    example.overridden = 5;
    assertThat((int) ReflectionHelpers.getField(example, "overridden")).isEqualTo(5);
  }