我想向由建模工具生成的Java類添加隱式轉換。所以我想將它們添加到這些類的伴隨對象中,以便編譯器自動找到它們。但是我不能將它們添加到單獨的文件中,因爲伴侶必須在同一個文件中定義。我能做些什麼嗎?在Scala中,如何爲Java中定義的類定義伴隨對象?
當然,我可以在另一個對象中定義我所有的隱式轉換,然後將它帶入作用域,但這需要額外的導入。其他解決方案?
我想向由建模工具生成的Java類添加隱式轉換。所以我想將它們添加到這些類的伴隨對象中,以便編譯器自動找到它們。但是我不能將它們添加到單獨的文件中,因爲伴侶必須在同一個文件中定義。我能做些什麼嗎?在Scala中,如何爲Java中定義的類定義伴隨對象?
當然,我可以在另一個對象中定義我所有的隱式轉換,然後將它帶入作用域,但這需要額外的導入。其他解決方案?
隨着Scala編譯器,因爲它代表現在沒有辦法定義伴侶對象,而不是將它們放在同一個文件中。您可以做的最好的是具有相同包和名稱以及額外導入的非伴隨對象。
如果你能想到一個創建事後陪伴而不會破壞封裝假設的好方法,請發表http://groups.google.com/group/scala-debate,因爲它顯然是一個非常有用的功能。
你當然可以定義你自己的伴侶對象,我經常在我自己的項目特定的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
)
您可以在包對象中定義隱式轉換,避免額外的導入。 – axel22 2011-02-07 13:41:15
Java類沒有伴隨對象。你的意思是你試圖欺騙,並讓它看起來像一個Java類有一個伴侶對象? – 2011-02-07 13:48:45