如果我的时间单位是秒类型并且循环持续时间是 86400/20 = 4320 个循环后的 20 秒,则 24 小时过去了。
long numberOfCyclesToReach24Hours(long cycleDuration, TimeUnit unit) {
// if I knew that unit is of type seconds I could
return TimeUnit.HOURS.toSeconds(24) / cycleDuration
// but if it is of type MILLISECONDS for example I have to
//return TimeUnit.HOURS.toMillis(24) / cycleDuration
}
这个问题是否有一个优雅的解决方案,或者我真的必须切换所有类型的案例?我知道这不会经常发生,但是如果将来TimeUnit
引入新类型,则必须修改代码:)
我也在考虑使用该TimeUnit.values
方法并依赖于返回类型的顺序,并通过检查输入单元在其中的位置来了解哪个常数(1000L、60L 等)我可以计算循环次数我自己没有任何toSeconds
等toMillis
方法,但这更丑陋,真的很奇怪:)