code: public T extract(Object target) {
          if (target == null) {
              return null;
          }
  
          Class targetClass = target.getClass();
          try {
              if (propertyAccessor == null || propertyAccessor.getDeclaringClass() != targetClass) {
                  propertyAccessor = findReadMethod(propertyName, target.getClass());
              }
  
              if (propertyAccessor != null) {
                  return (T) propertyAccessor.invoke(target);
              }
              else {
                  throw new RuntimeException("Readable property " + propertyName +
                                             " does not exist in the class "
                                             + targetClass);
              }
          }
          catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
docs: {@inheritDoc}