001    package org.hamcrest;
002    
003    /**
004     * Utility class for writing one off matchers.
005     * For example:
006     * <pre>
007     * Matcher&lt;String&gt; aNonEmptyString = new CustomMatcher&lt;String&gt;("a non empty string") {
008     *   public boolean matches(Object object) {
009     *     return ((object instanceof String) && !((String) object).isEmpty();
010     *   }
011     * };
012     * </pre>
013     * <p>
014     * This class is designed for scenarios where an anonymous inner class
015     * matcher makes sense. It should not be used by API designers implementing
016     * matchers.
017     *
018     * @author Neil Dunn
019     * @see CustomTypeSafeMatcher for a type safe variant of this class that you probably
020     *  want to use.
021     * @param <T> The type of object being matched.
022     */
023    public abstract class CustomMatcher<T> extends BaseMatcher<T> {
024        private final String fixedDescription;
025    
026        public CustomMatcher(String description) {
027            if (description == null) {
028                throw new IllegalArgumentException("Description should be non null!");
029            }
030            this.fixedDescription = description;
031        }
032    
033        @Override
034        public final void describeTo(Description description) {
035            description.appendText(fixedDescription);
036        }
037    }