original.java
static class ExpirationSpec {
@Nullable
private final Long expireAfterAccessMillis;
@Nullable
private final Long expireAfterWriteMillis;
private ExpirationSpec(Long expireAfterAccessMillis, Long expireAfterWriteMillis) {
Preconditions.checkArgument(
expireAfterAccessMillis == null || expireAfterWriteMillis == null);
this.expireAfterAccessMillis = expireAfterAccessMillis;
this.expireAfterWriteMillis = expireAfterWriteMillis;
}
public static ExpirationSpec afterAccess(long afterAccess, TimeUnit unit) {
return new ExpirationSpec(unit.toMillis(afterAccess), null);
}
public static ExpirationSpec afterWrite(long afterWrite, TimeUnit unit) {
return new ExpirationSpec(null, unit.toMillis(afterWrite));
}
@Override
public int hashCode() {
return Objects.hashCode(expireAfterAccessMillis, expireAfterWriteMillis);
}
@Override
public boolean equals(Object o) {
if (o instanceof ExpirationSpec) {
ExpirationSpec that = (ExpirationSpec) o;
return Objects.equal(this.expireAfterAccessMillis, that.expireAfterAccessMillis)
&& Objects.equal(this.expireAfterWriteMillis, that.expireAfterWriteMillis);
}
return false;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("expireAfterAccessMillis", expireAfterAccessMillis)
.add("expireAfterWriteMillis", expireAfterWriteMillis)
.toString();
}
}
modified.java
static class DurationSpec {
private final long duration;
private final TimeUnit unit;
private DurationSpec(long duration, TimeUnit unit) {
this.duration = duration;
this.unit = unit;
}
public static DurationSpec of(long duration, TimeUnit unit) {
return new DurationSpec(duration, unit);
}
@Override
public int hashCode() {
return Objects.hashCode(duration, unit);
}
@Override
public boolean equals(Object o) {
if (o instanceof DurationSpec) {
DurationSpec that = (DurationSpec) o;
return unit.toNanos(duration) == that.unit.toNanos(that.duration);
}
return false;
}
@Override
public String toString() {
return Objects.toStringHelper(this)
.add("duration", duration)
.add("unit", unit)
.toString();
}
}