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);
	}
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 ) ; }
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