時間単位が秒タイプで、サイクル期間が 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
ものですが、これはさらに醜く、本当に奇妙です:)