我正在使用类似Product
的库
class Product {
def toString() = "Whatever"
}
我想覆盖此toString
方法。所以有两种解决方案。
1 - 复制该类的内容并在您自己的项目中创建相同的新类,并立即使用该方法执行任何操作 2 - 使用
Scala Impilicit
第一种方法非常可悲。所以我尝试了第二个,但面对这个问题。我成功地在该类中添加了新方法,但无法覆盖现有方法。让我用例子解释一下:
class NewProduct(val p: Product) {
override def toString() = "an-other whatever"
}
implicit def customToString(p: Product) = new NewProduct(p)
现在如果我以这种方式打印println((new Product()).toString)
它会打印whatever
,但我期待an-other whatever
它似乎没有覆盖该方法,因为如果我添加新方法,那么它按预期工作
class NewProduct(val p: Product) {
def NewtoString() = "an-other whatever"
}
implicit def customToString(p: Product) = new NewProduct(p)
现在如果我以这种方式打印println((new Product()).NewtoString)
它会打印an-other whatever
,它的平均新方法NewtoString
会被添加到该类中。
我失踪了什么? 是否有可能在Scala中使用impicit覆盖方法?
答案 0 :(得分:7)
如果scala编译器在没有它的情况下找不到方法,则使用Implicits,因此你不能用implicits覆盖方法。 使用继承执行此任务。
class NewProduct extends Product {
override def toString() = "an-other whatever"
}