package com.googlecode.totallylazy.predicates;
import com.googlecode.totallylazy.Strings;
import com.googlecode.totallylazy.Value;
import com.googlecode.totallylazy.annotations.multimethod;
import static java.lang.String.format;
public class EqualsPredicate<T> extends LogicalPredicate<T> implements Value<T> {
private final T value;
private EqualsPredicate(T value) {
this.value = value;
}
public static <T> LogicalPredicate<T> equalTo(T value) {
if (value == null) return new NullPredicate<T>();
return new EqualsPredicate<T>(value);
}
public static <T> LogicalPredicate<T> is(T value) {
return equalTo(value);
}
public boolean matches(T other) {
return value.equals(other);
}
public T value() {
return value;
}
@multimethod
public boolean equals(EqualsPredicate other) {
return value.equals(other.value());
}
@Override
public int hashCode() {
return 31 * value.hashCode();
}
@Override
public String toString() {
return Strings.asString(value);
}
}