code: public static <T, U> Matcher<T> hasFeature(String featureDescription, String featureName,
  		Function<T, U> featureFunction, Matcher<? super U> featureMatcher)
  	{
  		return new HasFeatureMatcher<>(featureDescription, featureName, featureFunction, featureMatcher);
  	}
docs: Returns a matcher that matches the specified feature of an object.
  <p>
  For example:
  <pre>
  assertThat("ham", hasFeature("a string with length", "string length", String::length, equalTo(3)));
  </pre>
  
  @param featureDescription
  a description of this feature used by {@code describeTo}
  @param featureName
  the name of this feature used by {@code describeMismatch}
  @param featureFunction
  a function to extract the feature from the object
  @param featureMatcher
  the matcher to apply to the specified feature
  @param <T>
  the type of the object to be matched
  @param <U>
  the type of the feature to be matched
  @return the feature matcher