class FieldsOrPropertiesExtractor {

  /**
   * Call {@link #extract(Iterable, Function)} after converting objects to an iterable.
   * <p>
   * Behavior is described in javadoc {@link AbstractObjectArrayAssert#extracting(Function)}
   * @param <F> type of elements to extract a value from
   * @param <T> the extracted value type
   * @param objects the elements to extract a value from
   * @param extractor the extractor function
   * @return the extracted values
   */
  public static <F, T> T[] extract(F[] objects, Function<? super F, T> extractor) {
    checkObjectToExtractFromIsNotNull(objects);
    List<T> result = extract(newArrayList(objects), extractor);
    return toArray(result);
  }

  /**
   * Behavior is described in {@link AbstractIterableAssert#extracting(Function)}
   * @param <F> type of elements to extract a value from
   * @param <T> the extracted value type
   * @param objects the elements to extract a value from
   * @param extractor the extractor function
   * @return the extracted values
   */
  public static <F, T> List<T> extract(Iterable<? extends F> objects, Function<? super F, T> extractor) {
    checkObjectToExtractFromIsNotNull(objects);
    return stream(objects).map(extractor).collect(toList());
  }

  private static void checkObjectToExtractFromIsNotNull(Object object) {<FILL_FUNCTION_BODY>}

}

    if (object == null) throw new AssertionError("Expecting actual not to be null");
  
<no_super_class>