package edu.uw.zookeeper.data; import com.google.common.base.Objects; import com.google.common.base.Supplier; public final class StampedValue<T> implements Supplier<T >{ public static <T> StampedValue<T> valueOf(long stamp, T value) { return new StampedValue<T>(stamp, value); } private final long stamp; private final T value; public StampedValue(long stamp, T value) { this.stamp = stamp; this.value = value; } public long stamp() { return stamp; } @Override public T get() { return value; } @Override public String toString() { return String.format("(%d, %s)", stamp, value); } @Override public boolean equals(Object obj) { if (this == obj) { return true; } if (! (obj instanceof StampedValue<?>)) { return false; } StampedValue<?> other = (StampedValue<?>) obj; return (stamp == other.stamp) && Objects.equal(value, other.value); } @Override public int hashCode() { return Objects.hashCode(stamp, value); } }