### Question:
FalsePredicate implements Predicate<T> { @Override public boolean equals(Object other) { return EqualsBuilder.reflectionEquals(this, other); }  @Override boolean evaluate(T item); @Override boolean equals(Object other); @Override int hashCode();  }### Answer:
@Test public void shouldBeEqualIfOtherPredicateIsAlsoAFalsePredicate() throws Exception { Predicate<Object> firstPredicate = new FalsePredicate<Object>(); Predicate<Object> secondPredicate = new FalsePredicate<Object>(); boolean equal = firstPredicate.equals(secondPredicate); assertThat(equal, is(true)); }
@Test public void shouldBeEqualIfOtherPredicateIsAFalsePredicateButTypesAreDifferent() throws Exception { Predicate<String> firstPredicate = new FalsePredicate<String>(); Predicate<Integer> secondPredicate = new FalsePredicate<Integer>(); boolean equal = firstPredicate.equals(secondPredicate); assertThat(equal, is(true)); }
@Test public void shouldNotBeEqualIfOtherPredicateIsNotAFalsePredicate() throws Exception { Predicate<Object> firstPredicate = new FalsePredicate<Object>(); Predicate<Object> secondPredicate = new TruePredicate<Object>(); boolean equal = firstPredicate.equals(secondPredicate); assertThat(equal, is(false)); }