【发布时间】:2015-11-11 14:53:14
【问题描述】:
有没有优雅的方式将java.time.Duration 转换为scala.concurrent.duration.FiniteDuration?
我正在尝试在 Scala 中对 Config 进行以下简单使用:
val d = ConfigFactory.load().getDuration("application.someTimeout")
但是我没有看到在 Scala 中使用结果的任何简单方法。 当然希望 Typesafe 的好人没想到我会这样做:
FiniteDuration(d.getNano, TimeUnit.NANOSECONDS)
编辑:请注意该行有一个错误,这证明了这一点。请参阅下面的选定答案。
【问题讨论】:
-
显示的解决方案有什么问题?这很容易理解。如果它对您来说不够短,请将其包装在一个函数中/创建一个隐式转换。
-
@sschaef 令人烦恼的一点是所谓的“对 scala 友好”的库,用于输出 Java 类型,但在谈到 Config 时,这并不是什么新鲜事。
-
Typesafe Config 根据其项目定义同时服务于 Java 和 Scala 客户端。我同意必须使用隐式转换有点令人惊讶。我在 MyConfig 单例中介绍了这一点,因此应用程序代码永远不需要知道。不应在应用程序级代码中散布原始的 Typesafe Config 访问。
-
对于某些用途,以特定单位(通常是 ms)读取配置可能就足够了。然后简单的“.toMillis”就可以了。这仍然允许配置文件提供任何对我们人类有益的单元。
标签: scala config duration scala-java-interop