Original
 1 static class ExpirationSpec {
 2   @Nullable
 3   private final Long expireAfterAccessMillis;
 4   @Nullable
 5   private final Long expireAfterWriteMillis;
 6 
 7   private ExpirationSpec(Long expireAfterAccessMillis, Long expireAfterWriteMillis) {
 8     Preconditions.checkArgument(
 9         expireAfterAccessMillis == null || expireAfterWriteMillis == null);
10     this.expireAfterAccessMillis = expireAfterAccessMillis;
11     this.expireAfterWriteMillis = expireAfterWriteMillis;
12   }
13 
14   public static ExpirationSpec afterAccess(long afterAccess, TimeUnit unit) {
15     return new ExpirationSpec(unit.toMillis(afterAccess), null);
16   }
17 
18   public static ExpirationSpec afterWrite(long afterWrite, TimeUnit unit) {
19     return new ExpirationSpec(null, unit.toMillis(afterWrite));
20   }
   
   
   
   
   
   
   
   
   
20 
21 
22   @Override
23   public int hashCode() {
24     return Objects.hashCode(expireAfterAccessMillis, expireAfterWriteMillis);
25   }
26 
27   @Override
28   public boolean equals(Object o) {
29     if (o instanceof ExpirationSpec) {
30       ExpirationSpec that = (ExpirationSpec) o;
31       return Objects.equal(this.expireAfterAccessMillis, that.expireAfterAccessMillis)
32           && Objects.equal(this.expireAfterWriteMillis, that.expireAfterWriteMillis);
33     }
   
   
33 
34     return false;
35   }
36 
37   @Override
38   public String toString() {
39     return Objects.toStringHelper(this)
40         .add("expireAfterAccessMillis", expireAfterAccessMillis)
41         .add("expireAfterWriteMillis", expireAfterWriteMillis)
42         .toString();
43   }
44 }
45 
Modified
 1 static class DurationSpec {
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
   
 2   private final long duration;
 3   private final TimeUnit unit;
 4 
 5   private DurationSpec(long duration, TimeUnit unit) {
 6     this.duration = duration;
 7     this.unit = unit;
 8   }
 9 
10   public static DurationSpec of(long duration, TimeUnit unit) {
11     return new DurationSpec(duration, unit);
12   }
13 
14   @Override
15   public int hashCode() {
16     return Objects.hashCode(duration, unit);
17   }
18 
19   @Override
20   public boolean equals(Object o) {
   
   
   
   
21     if (o instanceof DurationSpec) {
22       DurationSpec that = (DurationSpec) o;
23       return unit.toNanos(duration) == that.unit.toNanos(that.duration);
24     }
25     return false;
26   }
27 
28   @Override
29   public String toString() {
30     return Objects.toStringHelper(this)
31         .add("duration", duration)
32         .add("unit", unit)
33         .toString();
34   }
35 }
36