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

相關問題