Versioned { @Override public boolean equals(final Object other) { if (!(other instanceof Versioned)) { return false; } final Versioned<V> that = (Versioned) other; return Objects.equal(value, that.value) && Objects.equal(version, that.version) && Objects.equal(creationTime, that.creationTime); } Versioned(final V value, final long version, final long creationTime);  Versioned(final V value, final long version); V value(); long version(); long creationTime(); synchronized Versioned<U> map(final Function<V, U> transformer); static U valueOrElse(final Versioned<U> versioned, final U defaultValue); static U valueOrNull(final Versioned<U> versioned); @Override int hashCode(); @Override boolean equals(final Object other); @Override String toString();  }
@Test public void testEquals() { new EqualsTester().addEqualityGroup(stats1, stats1).addEqualityGroup(stats2).testEquals(); }