### Question:
LessThanMatcher implements Predicate<OpenNode<? extends E, ?>> { @Override public boolean equals(Object o) { if (o == null) { return false; } else if (o == this) { return true; } else if (o.getClass().equals(getClass())) { @SuppressWarnings("unchecked") final LessThanMatcher<E> matcher = (LessThanMatcher<E>)o; return matcher.comparator.equals(comparator) && matcher.value.equals(value); } else { return false; } } private  LessThanMatcher(Comparator<E> comparator, E value); @Override boolean test(OpenNode<? extends E, ?> openNode); @Override boolean equals(Object o); @Override int hashCode(); static Predicate<OpenNode<? extends E, ?>> create(Comparator<E> comparator, E value); static Predicate<OpenNode<? extends E, ?>> create(E value);  }### Answer:
@Test public void testEquals() { final Predicate<OpenNode<? extends Integer, ?>> matcher0 = LessThanMatcher.create(3); final Predicate<OpenNode<? extends Integer, ?>> matcher1 = LessThanMatcher.create(3); assertTrue(matcher0.equals(matcher1)); assertTrue(matcher1.equals(matcher0)); assertEquals(matcher0.hashCode(), matcher1.hashCode()); }