如何覆盖伴随对象的隐式函数?

时间:2016-12-16 11:58:44

标签: java scala implicit-conversion apache-spark-mllib companion-object

我是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类来获取任何功能。

RFunction中存在的方法也在我的扩展类A中实现。我不明白如何绕过或避免隐式转换。

任何想法都会受到赞赏。

1 个答案:

答案 0 :(得分:0)

在Scala中使用abstract class R扩展abstract class Rbis,并在随附的object Rbis中定义您需要的隐式函数(在我们的案例中,它们将在R之前调用它们) ,然后在java中扩展Rbis