@Override public int hashCode() { int result = 17; result = 37 * result + matcher.hashCode(); result = 37 * result + matcher.hashCode(object); return result; }
public MatchableObject(T object, Matcher<T> matcher) throws MatchingException { this.object = object; this.matcher = matcher; matcher.verify(object); }
@Override public boolean equals(Object obj) { if (obj == this) { return true; } if (!(obj instanceof MatchableObject)) { return false; } MatchableObject<?> matchableObject = (MatchableObject<?>) obj; if (!(matcher == matchableObject.matcher || (matcher != null && matcher. equals(matchableObject.matcher)))) { return false; } if (!matcher.getType().isInstance(matchableObject.object)) { return false; } return matcher.equals(object, matcher.getType().cast( matchableObject.object)); }
/** * Useful for generated classes, which don't override the equals method (e.g. some JAXB class generators) * */ public static <T> boolean equals(List<? extends T> listA, List<? extends T> listB, Matcher<? super T> matcher) { if (listA.size() != listB.size()) { return false; } for (Iterator<? extends T> iteratorA = listA.iterator(), iteratorB = listB. iterator(); iteratorA.hasNext();) { if (!matcher.equals(iteratorA.next(), iteratorB.next())) { return false; } } return true; }