10

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

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

+2

您可以在包对象中定义隐式转换,避免额外的导入。 – axel22 2011-02-07 13:41:15

+0

Java类没有伴随对象。你的意思是你试图欺骗,并让它看起来像一个Java类有一个伴侣对象? – 2011-02-07 13:48:45

回答

9

随着Scala编译器,因为它代表现在没有办法定义伴侣对象,而不是将它们放在同一个文件中。您可以做的最好的是具有相同包和名称以及额外导入的非伴随对象。

如果你能想到一个创建事后陪伴而不会破坏封装假设的好方法,请发表http://groups.google.com/group/scala-debate,因为它显然是一个非常有用的功能。

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是一个模块(即斯卡拉object

相关问题