0
我是Scala和隱式轉換的新手。如何覆蓋隨播對象的隱式函數?
我正在使用現有的scala庫,我無法控制它。讓我們從庫中考慮一個R類。
abstract class R {
}
object R {
implicit def RFunctions[K, V](r: R[(K, V)]) (implicit kt: ClassTag[K],vt: ClassTag[V], ord: Ordering[K] = null): RFunctions[K, V] = { new RFunctions(r) }
}
我在擴展R類以覆蓋它的幾乎所有行爲。但是這個新類是一個Java類。讓我們把這種A.
class A extends R {
}
問題是,在我的控制流程的某個時刻,控制跳轉到R的隱式聲明和使用RFunctions類的任何功能結束。
存在於RFunctions中的方法也在我的擴展類A中實現。我不明白我如何繞過或避免隱式轉換。
任何想法,將不勝感激。
嗯...'隱式'在Java中?如果你將它翻譯成Java,然後完全翻譯它。你不會找到在Java中使用implicits的簡單方法。 –
如果您的類A具有所有RFunction方法,那麼在應用任何隱式轉換之前它們將被調用 –
您不能。在代碼的某些地方,特別是在外部庫中,某些變量的靜態類型將是R,即使在運行時它實際上是A.因此,隱式轉換無論如何都會發生,無論您做什麼,因爲編譯器並非全知足以推論。實際上,RFunctions和R之間沒有打字關係。您不能從R的子類「實現」RFunction的方法,因爲它們是恰好通過轉換方法鏈接的獨立實體。 – HTNW