11

我想向建模工具生成的 Java 类添加隐式转换。所以我想将它们添加到这些类的伴随对象中,以便编译器自动找到它们。但我不能将它们添加到单独的文件中,因为必须在同一个文件中定义伴侣。对此我能做些什么吗?

当然,我可以在另一个对象中定义所有隐式转换,然后将其带入范围,但这需要额外的导入。还有其他解决方案吗?

4

2 回答 2

9

当然,您可以定义自己的伴生对象,我经常在自己的项目特定Predef类安排中这样做。例如:

object domain {

  type TimeUnit = java.util.concurrent.TimeUnit
  object TimeUnit {
    def valueOf(s : String) = java.util.concurrent.TimeUnit.valueOf(str)
    val Millis = java.util.concurrent.TimeUnit.MILLISECONDS
    //etc
  }

然后可以使用:

import my.domain._
val tu : TimeUnit = TimeUnit.valueOf("MILLISECONDS")

但你domain.TimeUnit是一个模块(即 scala object

于 2011-02-07T15:01:43.397 回答
9

就目前的 Scala 编译器而言,除了将它们放在同一个文件中之外,没有其他方法可以定义伴随对象。您可以做的最好的事情是具有相同包和名称以及额外导入的非伴随对象。

如果您能想出一种在不破坏封装假设的情况下创建事后陪伴的好方法,请在http://groups.google.com/group/scala-debate上发帖,因为这显然是一个非常有用的功能。

于 2011-02-07T16:05:52.403 回答