ndency inject ... public void process(LocalDate eventDate) { if (eventDate.isBefore(LocalDate.now(clock)) { ... } } } This approach allows an alternate clock, such as {@link #fixed(Instant,ZoneId) fixed}or {@link #offset(Clock,Duration) offset} to be used during testing.
The {@code system} factory methods provide clocks based on the best availablesystem clock This may use {@link System#currentTimeMillis()}, or a higher resolution clock if one is available.
Specification for implementors
This abstract class must be implemented with care to ensure other operate correctly. All implementations that can be instantiated must be final, immutable and thread-safe.
The principal methods are defined to allow the throwing of an exception. In normal use, no exceptions will be thrown, however one possible implementation would be to obtain the time from a central time server across the network. Obviously, in this case the lookup could fail, and so the method is permitted to throw an exception.
The returned instants from {@code Clock} work on a time-scale that ignores leap seconds.If the implementation wraps a source that provides leap second information, then a mechanism should be used to "smooth" the leap second, such as UTC-SLS.
Implementations should implement {@code Serializable} wherever possible and mustdocument whether or not they do support serialization.