用Clock.systemDefaultZone().millis()天真地替换System.currentTimeMillis()是否安全?

idb*_*ley 8 java datetime java-time

Java 8引入了java.time.Clock接口,它应该允许我有效地模拟系统时间调用(太棒了!).

我想天真地替换调用System.currentTimeMillis()与调用someClock.millis(),但目前尚不清楚,我认为这两个时钟实际上将根据给定的caviet所有情况下返回相同的价值观Clock.system*,他们使用"的状态文档...最好的系统时钟". System.currentTimeMillis()没有说明使用最佳可用时钟的任何类似声明.

Cup*_*Tae 5

嗯,不,你不能保证它会完全相同,因为

系统工厂方法根据最佳可用系统时钟提供时钟。这可以使用 System.currentTimeMillis() 或更高分辨率的时钟(如果可用)

因此它明确指出它可能会使用更好的时钟,这意味着它绝对可能会有所不同。

即使您分析所有现有的实现并发现它们都在使用,System.currentTimeMillis()您也明确不能保证事情会保持这种状态,因此依赖它是无效的。

这是否足够接近您的目的实际上取决于您的应用程序和个人喜好。